{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第1章 数据与Python语言"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 初始化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 本章需要用到的库\n",
    "import numpy as np # 导入numpy库\n",
    "import pandas as pd # 导入pandas库\n",
    "import matplotlib.pyplot as plt # 导入matplotlib库\n",
    "import seaborn as sns # 导入seaborn库\n",
    "\n",
    "# 设置初始化\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.1 数据与统计学"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.1.1 什么是统计学"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.1.2 变量和数据"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.1.3 数据的来源"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.2 Python的初步使用"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2.1 Python的下载与安装"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2.2 模块的安装与加载"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 安装模块\n",
    "# conda install pandas / pip install pandas  -> 需要在终端命令行中执行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'1.24.3'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 导入模块\n",
    "import numpy # 导入numpy模块\n",
    "numpy.__version__ # 查看numpy模块的版本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'1.24.3'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 导入模块并重命名\n",
    "import numpy as np # 导入numpy模块并重命名为np\n",
    "np.__version__ # 查看numpy模块的版本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 显示已安装模块的名称\n",
    "# conda list / pip list                      -> 需要在终端命令行中执行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 卸载（删除）安装在Python中的模块\n",
    "# conda remove pandas / pip uninstall pandas -> 需要在终端命令行中执行"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2.3 查看帮助文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on built-in function sum in module builtins:\n",
      "\n",
      "sum(iterable, /, start=0)\n",
      "    Return the sum of a 'start' value (default: 0) plus an iterable of numbers\n",
      "    \n",
      "    When the iterable is empty, return the start value.\n",
      "    This function is intended specifically for use with numeric values and may\n",
      "    reject non-numeric types.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(sum) # 查看sum函数的帮助文档"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on module random:\n",
      "\n",
      "NAME\n",
      "    random - Random variable generators.\n",
      "\n",
      "MODULE REFERENCE\n",
      "    https://docs.python.org/3.9/library/random\n",
      "    \n",
      "    The following documentation is automatically generated from the Python\n",
      "    source files.  It may be incomplete, incorrect or include features that\n",
      "    are considered implementation detail and may vary between Python\n",
      "    implementations.  When in doubt, consult the module reference at the\n",
      "    location listed above.\n",
      "\n",
      "DESCRIPTION\n",
      "        bytes\n",
      "        -----\n",
      "               uniform bytes (values between 0 and 255)\n",
      "    \n",
      "        integers\n",
      "        --------\n",
      "               uniform within range\n",
      "    \n",
      "        sequences\n",
      "        ---------\n",
      "               pick random element\n",
      "               pick random sample\n",
      "               pick weighted random sample\n",
      "               generate random permutation\n",
      "    \n",
      "        distributions on the real line:\n",
      "        ------------------------------\n",
      "               uniform\n",
      "               triangular\n",
      "               normal (Gaussian)\n",
      "               lognormal\n",
      "               negative exponential\n",
      "               gamma\n",
      "               beta\n",
      "               pareto\n",
      "               Weibull\n",
      "    \n",
      "        distributions on the circle (angles 0 to 2pi)\n",
      "        ---------------------------------------------\n",
      "               circular uniform\n",
      "               von Mises\n",
      "    \n",
      "    General notes on the underlying Mersenne Twister core generator:\n",
      "    \n",
      "    * The period is 2**19937-1.\n",
      "    * It is one of the most extensively tested generators in existence.\n",
      "    * The random() method is implemented in C, executes in a single Python step,\n",
      "      and is, therefore, threadsafe.\n",
      "\n",
      "CLASSES\n",
      "    _random.Random(builtins.object)\n",
      "        Random\n",
      "            SystemRandom\n",
      "    \n",
      "    class Random(_random.Random)\n",
      "     |  Random(x=None)\n",
      "     |  \n",
      "     |  Random number generator base class used by bound module functions.\n",
      "     |  \n",
      "     |  Used to instantiate instances of Random to get generators that don't\n",
      "     |  share state.\n",
      "     |  \n",
      "     |  Class Random can also be subclassed if you want to use a different basic\n",
      "     |  generator of your own devising: in that case, override the following\n",
      "     |  methods:  random(), seed(), getstate(), and setstate().\n",
      "     |  Optionally, implement a getrandbits() method so that randrange()\n",
      "     |  can cover arbitrarily large ranges.\n",
      "     |  \n",
      "     |  Method resolution order:\n",
      "     |      Random\n",
      "     |      _random.Random\n",
      "     |      builtins.object\n",
      "     |  \n",
      "     |  Methods defined here:\n",
      "     |  \n",
      "     |  __getstate__(self)\n",
      "     |      # Issue 17489: Since __reduce__ was defined to fix #759889 this is no\n",
      "     |      # longer called; we leave it here because it has been here since random was\n",
      "     |      # rewritten back in 2001 and why risk breaking something.\n",
      "     |  \n",
      "     |  __init__(self, x=None)\n",
      "     |      Initialize an instance.\n",
      "     |      \n",
      "     |      Optional argument x controls seeding, as for Random.seed().\n",
      "     |  \n",
      "     |  __reduce__(self)\n",
      "     |      Helper for pickle.\n",
      "     |  \n",
      "     |  __setstate__(self, state)\n",
      "     |  \n",
      "     |  betavariate(self, alpha, beta)\n",
      "     |      Beta distribution.\n",
      "     |      \n",
      "     |      Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "     |      Returned values range between 0 and 1.\n",
      "     |  \n",
      "     |  choice(self, seq)\n",
      "     |      Choose a random element from a non-empty sequence.\n",
      "     |  \n",
      "     |  choices(self, population, weights=None, *, cum_weights=None, k=1)\n",
      "     |      Return a k sized list of population elements chosen with replacement.\n",
      "     |      \n",
      "     |      If the relative weights or cumulative weights are not specified,\n",
      "     |      the selections are made with equal probability.\n",
      "     |  \n",
      "     |  expovariate(self, lambd)\n",
      "     |      Exponential distribution.\n",
      "     |      \n",
      "     |      lambd is 1.0 divided by the desired mean.  It should be\n",
      "     |      nonzero.  (The parameter would be called \"lambda\", but that is\n",
      "     |      a reserved word in Python.)  Returned values range from 0 to\n",
      "     |      positive infinity if lambd is positive, and from negative\n",
      "     |      infinity to 0 if lambd is negative.\n",
      "     |  \n",
      "     |  gammavariate(self, alpha, beta)\n",
      "     |      Gamma distribution.  Not the gamma function!\n",
      "     |      \n",
      "     |      Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "     |      \n",
      "     |      The probability distribution function is:\n",
      "     |      \n",
      "     |                  x ** (alpha - 1) * math.exp(-x / beta)\n",
      "     |        pdf(x) =  --------------------------------------\n",
      "     |                    math.gamma(alpha) * beta ** alpha\n",
      "     |  \n",
      "     |  gauss(self, mu, sigma)\n",
      "     |      Gaussian distribution.\n",
      "     |      \n",
      "     |      mu is the mean, and sigma is the standard deviation.  This is\n",
      "     |      slightly faster than the normalvariate() function.\n",
      "     |      \n",
      "     |      Not thread-safe without a lock around calls.\n",
      "     |  \n",
      "     |  getstate(self)\n",
      "     |      Return internal state; can be passed to setstate() later.\n",
      "     |  \n",
      "     |  lognormvariate(self, mu, sigma)\n",
      "     |      Log normal distribution.\n",
      "     |      \n",
      "     |      If you take the natural logarithm of this distribution, you'll get a\n",
      "     |      normal distribution with mean mu and standard deviation sigma.\n",
      "     |      mu can have any value, and sigma must be greater than zero.\n",
      "     |  \n",
      "     |  normalvariate(self, mu, sigma)\n",
      "     |      Normal distribution.\n",
      "     |      \n",
      "     |      mu is the mean, and sigma is the standard deviation.\n",
      "     |  \n",
      "     |  paretovariate(self, alpha)\n",
      "     |      Pareto distribution.  alpha is the shape parameter.\n",
      "     |  \n",
      "     |  randbytes(self, n)\n",
      "     |      Generate n random bytes.\n",
      "     |  \n",
      "     |  randint(self, a, b)\n",
      "     |      Return random integer in range [a, b], including both end points.\n",
      "     |  \n",
      "     |  randrange(self, start, stop=None, step=1)\n",
      "     |      Choose a random item from range(start, stop[, step]).\n",
      "     |      \n",
      "     |      This fixes the problem with randint() which includes the\n",
      "     |      endpoint; in Python this is usually not what you want.\n",
      "     |  \n",
      "     |  sample(self, population, k, *, counts=None)\n",
      "     |      Chooses k unique random elements from a population sequence or set.\n",
      "     |      \n",
      "     |      Returns a new list containing elements from the population while\n",
      "     |      leaving the original population unchanged.  The resulting list is\n",
      "     |      in selection order so that all sub-slices will also be valid random\n",
      "     |      samples.  This allows raffle winners (the sample) to be partitioned\n",
      "     |      into grand prize and second place winners (the subslices).\n",
      "     |      \n",
      "     |      Members of the population need not be hashable or unique.  If the\n",
      "     |      population contains repeats, then each occurrence is a possible\n",
      "     |      selection in the sample.\n",
      "     |      \n",
      "     |      Repeated elements can be specified one at a time or with the optional\n",
      "     |      counts parameter.  For example:\n",
      "     |      \n",
      "     |          sample(['red', 'blue'], counts=[4, 2], k=5)\n",
      "     |      \n",
      "     |      is equivalent to:\n",
      "     |      \n",
      "     |          sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)\n",
      "     |      \n",
      "     |      To choose a sample from a range of integers, use range() for the\n",
      "     |      population argument.  This is especially fast and space efficient\n",
      "     |      for sampling from a large population:\n",
      "     |      \n",
      "     |          sample(range(10000000), 60)\n",
      "     |  \n",
      "     |  seed(self, a=None, version=2)\n",
      "     |      Initialize internal state from a seed.\n",
      "     |      \n",
      "     |      The only supported seed types are None, int, float,\n",
      "     |      str, bytes, and bytearray.\n",
      "     |      \n",
      "     |      None or no argument seeds from current time or from an operating\n",
      "     |      system specific randomness source if available.\n",
      "     |      \n",
      "     |      If *a* is an int, all bits are used.\n",
      "     |      \n",
      "     |      For version 2 (the default), all of the bits are used if *a* is a str,\n",
      "     |      bytes, or bytearray.  For version 1 (provided for reproducing random\n",
      "     |      sequences from older versions of Python), the algorithm for str and\n",
      "     |      bytes generates a narrower range of seeds.\n",
      "     |  \n",
      "     |  setstate(self, state)\n",
      "     |      Restore internal state from object returned by getstate().\n",
      "     |  \n",
      "     |  shuffle(self, x, random=None)\n",
      "     |      Shuffle list x in place, and return None.\n",
      "     |      \n",
      "     |      Optional argument random is a 0-argument function returning a\n",
      "     |      random float in [0.0, 1.0); if it is the default None, the\n",
      "     |      standard random.random will be used.\n",
      "     |  \n",
      "     |  triangular(self, low=0.0, high=1.0, mode=None)\n",
      "     |      Triangular distribution.\n",
      "     |      \n",
      "     |      Continuous distribution bounded by given lower and upper limits,\n",
      "     |      and having a given mode value in-between.\n",
      "     |      \n",
      "     |      http://en.wikipedia.org/wiki/Triangular_distribution\n",
      "     |  \n",
      "     |  uniform(self, a, b)\n",
      "     |      Get a random number in the range [a, b) or [a, b] depending on rounding.\n",
      "     |  \n",
      "     |  vonmisesvariate(self, mu, kappa)\n",
      "     |      Circular data distribution.\n",
      "     |      \n",
      "     |      mu is the mean angle, expressed in radians between 0 and 2*pi, and\n",
      "     |      kappa is the concentration parameter, which must be greater than or\n",
      "     |      equal to zero.  If kappa is equal to zero, this distribution reduces\n",
      "     |      to a uniform random angle over the range 0 to 2*pi.\n",
      "     |  \n",
      "     |  weibullvariate(self, alpha, beta)\n",
      "     |      Weibull distribution.\n",
      "     |      \n",
      "     |      alpha is the scale parameter and beta is the shape parameter.\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Class methods defined here:\n",
      "     |  \n",
      "     |  __init_subclass__(**kwargs) from builtins.type\n",
      "     |      Control how subclasses generate random integers.\n",
      "     |      \n",
      "     |      The algorithm a subclass can use depends on the random() and/or\n",
      "     |      getrandbits() implementation available to it and determines\n",
      "     |      whether it can generate random integers from arbitrarily large\n",
      "     |      ranges.\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Data descriptors defined here:\n",
      "     |  \n",
      "     |  __dict__\n",
      "     |      dictionary for instance variables (if defined)\n",
      "     |  \n",
      "     |  __weakref__\n",
      "     |      list of weak references to the object (if defined)\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Data and other attributes defined here:\n",
      "     |  \n",
      "     |  VERSION = 3\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Methods inherited from _random.Random:\n",
      "     |  \n",
      "     |  getrandbits(self, k, /)\n",
      "     |      getrandbits(k) -> x.  Generates an int with k random bits.\n",
      "     |  \n",
      "     |  random(self, /)\n",
      "     |      random() -> x in the interval [0, 1).\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Static methods inherited from _random.Random:\n",
      "     |  \n",
      "     |  __new__(*args, **kwargs) from builtins.type\n",
      "     |      Create and return a new object.  See help(type) for accurate signature.\n",
      "    \n",
      "    class SystemRandom(Random)\n",
      "     |  SystemRandom(x=None)\n",
      "     |  \n",
      "     |  Alternate random number generator using sources provided\n",
      "     |  by the operating system (such as /dev/urandom on Unix or\n",
      "     |  CryptGenRandom on Windows).\n",
      "     |  \n",
      "     |   Not available on all systems (see os.urandom() for details).\n",
      "     |  \n",
      "     |  Method resolution order:\n",
      "     |      SystemRandom\n",
      "     |      Random\n",
      "     |      _random.Random\n",
      "     |      builtins.object\n",
      "     |  \n",
      "     |  Methods defined here:\n",
      "     |  \n",
      "     |  getrandbits(self, k)\n",
      "     |      getrandbits(k) -> x.  Generates an int with k random bits.\n",
      "     |  \n",
      "     |  getstate = _notimplemented(self, *args, **kwds)\n",
      "     |  \n",
      "     |  randbytes(self, n)\n",
      "     |      Generate n random bytes.\n",
      "     |  \n",
      "     |  random(self)\n",
      "     |      Get the next random number in the range [0.0, 1.0).\n",
      "     |  \n",
      "     |  seed(self, *args, **kwds)\n",
      "     |      Stub method.  Not used for a system random number generator.\n",
      "     |  \n",
      "     |  setstate = _notimplemented(self, *args, **kwds)\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Methods inherited from Random:\n",
      "     |  \n",
      "     |  __getstate__(self)\n",
      "     |      # Issue 17489: Since __reduce__ was defined to fix #759889 this is no\n",
      "     |      # longer called; we leave it here because it has been here since random was\n",
      "     |      # rewritten back in 2001 and why risk breaking something.\n",
      "     |  \n",
      "     |  __init__(self, x=None)\n",
      "     |      Initialize an instance.\n",
      "     |      \n",
      "     |      Optional argument x controls seeding, as for Random.seed().\n",
      "     |  \n",
      "     |  __reduce__(self)\n",
      "     |      Helper for pickle.\n",
      "     |  \n",
      "     |  __setstate__(self, state)\n",
      "     |  \n",
      "     |  betavariate(self, alpha, beta)\n",
      "     |      Beta distribution.\n",
      "     |      \n",
      "     |      Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "     |      Returned values range between 0 and 1.\n",
      "     |  \n",
      "     |  choice(self, seq)\n",
      "     |      Choose a random element from a non-empty sequence.\n",
      "     |  \n",
      "     |  choices(self, population, weights=None, *, cum_weights=None, k=1)\n",
      "     |      Return a k sized list of population elements chosen with replacement.\n",
      "     |      \n",
      "     |      If the relative weights or cumulative weights are not specified,\n",
      "     |      the selections are made with equal probability.\n",
      "     |  \n",
      "     |  expovariate(self, lambd)\n",
      "     |      Exponential distribution.\n",
      "     |      \n",
      "     |      lambd is 1.0 divided by the desired mean.  It should be\n",
      "     |      nonzero.  (The parameter would be called \"lambda\", but that is\n",
      "     |      a reserved word in Python.)  Returned values range from 0 to\n",
      "     |      positive infinity if lambd is positive, and from negative\n",
      "     |      infinity to 0 if lambd is negative.\n",
      "     |  \n",
      "     |  gammavariate(self, alpha, beta)\n",
      "     |      Gamma distribution.  Not the gamma function!\n",
      "     |      \n",
      "     |      Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "     |      \n",
      "     |      The probability distribution function is:\n",
      "     |      \n",
      "     |                  x ** (alpha - 1) * math.exp(-x / beta)\n",
      "     |        pdf(x) =  --------------------------------------\n",
      "     |                    math.gamma(alpha) * beta ** alpha\n",
      "     |  \n",
      "     |  gauss(self, mu, sigma)\n",
      "     |      Gaussian distribution.\n",
      "     |      \n",
      "     |      mu is the mean, and sigma is the standard deviation.  This is\n",
      "     |      slightly faster than the normalvariate() function.\n",
      "     |      \n",
      "     |      Not thread-safe without a lock around calls.\n",
      "     |  \n",
      "     |  lognormvariate(self, mu, sigma)\n",
      "     |      Log normal distribution.\n",
      "     |      \n",
      "     |      If you take the natural logarithm of this distribution, you'll get a\n",
      "     |      normal distribution with mean mu and standard deviation sigma.\n",
      "     |      mu can have any value, and sigma must be greater than zero.\n",
      "     |  \n",
      "     |  normalvariate(self, mu, sigma)\n",
      "     |      Normal distribution.\n",
      "     |      \n",
      "     |      mu is the mean, and sigma is the standard deviation.\n",
      "     |  \n",
      "     |  paretovariate(self, alpha)\n",
      "     |      Pareto distribution.  alpha is the shape parameter.\n",
      "     |  \n",
      "     |  randint(self, a, b)\n",
      "     |      Return random integer in range [a, b], including both end points.\n",
      "     |  \n",
      "     |  randrange(self, start, stop=None, step=1)\n",
      "     |      Choose a random item from range(start, stop[, step]).\n",
      "     |      \n",
      "     |      This fixes the problem with randint() which includes the\n",
      "     |      endpoint; in Python this is usually not what you want.\n",
      "     |  \n",
      "     |  sample(self, population, k, *, counts=None)\n",
      "     |      Chooses k unique random elements from a population sequence or set.\n",
      "     |      \n",
      "     |      Returns a new list containing elements from the population while\n",
      "     |      leaving the original population unchanged.  The resulting list is\n",
      "     |      in selection order so that all sub-slices will also be valid random\n",
      "     |      samples.  This allows raffle winners (the sample) to be partitioned\n",
      "     |      into grand prize and second place winners (the subslices).\n",
      "     |      \n",
      "     |      Members of the population need not be hashable or unique.  If the\n",
      "     |      population contains repeats, then each occurrence is a possible\n",
      "     |      selection in the sample.\n",
      "     |      \n",
      "     |      Repeated elements can be specified one at a time or with the optional\n",
      "     |      counts parameter.  For example:\n",
      "     |      \n",
      "     |          sample(['red', 'blue'], counts=[4, 2], k=5)\n",
      "     |      \n",
      "     |      is equivalent to:\n",
      "     |      \n",
      "     |          sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)\n",
      "     |      \n",
      "     |      To choose a sample from a range of integers, use range() for the\n",
      "     |      population argument.  This is especially fast and space efficient\n",
      "     |      for sampling from a large population:\n",
      "     |      \n",
      "     |          sample(range(10000000), 60)\n",
      "     |  \n",
      "     |  shuffle(self, x, random=None)\n",
      "     |      Shuffle list x in place, and return None.\n",
      "     |      \n",
      "     |      Optional argument random is a 0-argument function returning a\n",
      "     |      random float in [0.0, 1.0); if it is the default None, the\n",
      "     |      standard random.random will be used.\n",
      "     |  \n",
      "     |  triangular(self, low=0.0, high=1.0, mode=None)\n",
      "     |      Triangular distribution.\n",
      "     |      \n",
      "     |      Continuous distribution bounded by given lower and upper limits,\n",
      "     |      and having a given mode value in-between.\n",
      "     |      \n",
      "     |      http://en.wikipedia.org/wiki/Triangular_distribution\n",
      "     |  \n",
      "     |  uniform(self, a, b)\n",
      "     |      Get a random number in the range [a, b) or [a, b] depending on rounding.\n",
      "     |  \n",
      "     |  vonmisesvariate(self, mu, kappa)\n",
      "     |      Circular data distribution.\n",
      "     |      \n",
      "     |      mu is the mean angle, expressed in radians between 0 and 2*pi, and\n",
      "     |      kappa is the concentration parameter, which must be greater than or\n",
      "     |      equal to zero.  If kappa is equal to zero, this distribution reduces\n",
      "     |      to a uniform random angle over the range 0 to 2*pi.\n",
      "     |  \n",
      "     |  weibullvariate(self, alpha, beta)\n",
      "     |      Weibull distribution.\n",
      "     |      \n",
      "     |      alpha is the scale parameter and beta is the shape parameter.\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Class methods inherited from Random:\n",
      "     |  \n",
      "     |  __init_subclass__(**kwargs) from builtins.type\n",
      "     |      Control how subclasses generate random integers.\n",
      "     |      \n",
      "     |      The algorithm a subclass can use depends on the random() and/or\n",
      "     |      getrandbits() implementation available to it and determines\n",
      "     |      whether it can generate random integers from arbitrarily large\n",
      "     |      ranges.\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Data descriptors inherited from Random:\n",
      "     |  \n",
      "     |  __dict__\n",
      "     |      dictionary for instance variables (if defined)\n",
      "     |  \n",
      "     |  __weakref__\n",
      "     |      list of weak references to the object (if defined)\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Data and other attributes inherited from Random:\n",
      "     |  \n",
      "     |  VERSION = 3\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Static methods inherited from _random.Random:\n",
      "     |  \n",
      "     |  __new__(*args, **kwargs) from builtins.type\n",
      "     |      Create and return a new object.  See help(type) for accurate signature.\n",
      "\n",
      "FUNCTIONS\n",
      "    betavariate(alpha, beta) method of Random instance\n",
      "        Beta distribution.\n",
      "        \n",
      "        Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "        Returned values range between 0 and 1.\n",
      "    \n",
      "    choice(seq) method of Random instance\n",
      "        Choose a random element from a non-empty sequence.\n",
      "    \n",
      "    choices(population, weights=None, *, cum_weights=None, k=1) method of Random instance\n",
      "        Return a k sized list of population elements chosen with replacement.\n",
      "        \n",
      "        If the relative weights or cumulative weights are not specified,\n",
      "        the selections are made with equal probability.\n",
      "    \n",
      "    expovariate(lambd) method of Random instance\n",
      "        Exponential distribution.\n",
      "        \n",
      "        lambd is 1.0 divided by the desired mean.  It should be\n",
      "        nonzero.  (The parameter would be called \"lambda\", but that is\n",
      "        a reserved word in Python.)  Returned values range from 0 to\n",
      "        positive infinity if lambd is positive, and from negative\n",
      "        infinity to 0 if lambd is negative.\n",
      "    \n",
      "    gammavariate(alpha, beta) method of Random instance\n",
      "        Gamma distribution.  Not the gamma function!\n",
      "        \n",
      "        Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "        \n",
      "        The probability distribution function is:\n",
      "        \n",
      "                    x ** (alpha - 1) * math.exp(-x / beta)\n",
      "          pdf(x) =  --------------------------------------\n",
      "                      math.gamma(alpha) * beta ** alpha\n",
      "    \n",
      "    gauss(mu, sigma) method of Random instance\n",
      "        Gaussian distribution.\n",
      "        \n",
      "        mu is the mean, and sigma is the standard deviation.  This is\n",
      "        slightly faster than the normalvariate() function.\n",
      "        \n",
      "        Not thread-safe without a lock around calls.\n",
      "    \n",
      "    getrandbits(k, /) method of Random instance\n",
      "        getrandbits(k) -> x.  Generates an int with k random bits.\n",
      "    \n",
      "    getstate() method of Random instance\n",
      "        Return internal state; can be passed to setstate() later.\n",
      "    \n",
      "    lognormvariate(mu, sigma) method of Random instance\n",
      "        Log normal distribution.\n",
      "        \n",
      "        If you take the natural logarithm of this distribution, you'll get a\n",
      "        normal distribution with mean mu and standard deviation sigma.\n",
      "        mu can have any value, and sigma must be greater than zero.\n",
      "    \n",
      "    normalvariate(mu, sigma) method of Random instance\n",
      "        Normal distribution.\n",
      "        \n",
      "        mu is the mean, and sigma is the standard deviation.\n",
      "    \n",
      "    paretovariate(alpha) method of Random instance\n",
      "        Pareto distribution.  alpha is the shape parameter.\n",
      "    \n",
      "    randbytes(n) method of Random instance\n",
      "        Generate n random bytes.\n",
      "    \n",
      "    randint(a, b) method of Random instance\n",
      "        Return random integer in range [a, b], including both end points.\n",
      "    \n",
      "    random() method of Random instance\n",
      "        random() -> x in the interval [0, 1).\n",
      "    \n",
      "    randrange(start, stop=None, step=1) method of Random instance\n",
      "        Choose a random item from range(start, stop[, step]).\n",
      "        \n",
      "        This fixes the problem with randint() which includes the\n",
      "        endpoint; in Python this is usually not what you want.\n",
      "    \n",
      "    sample(population, k, *, counts=None) method of Random instance\n",
      "        Chooses k unique random elements from a population sequence or set.\n",
      "        \n",
      "        Returns a new list containing elements from the population while\n",
      "        leaving the original population unchanged.  The resulting list is\n",
      "        in selection order so that all sub-slices will also be valid random\n",
      "        samples.  This allows raffle winners (the sample) to be partitioned\n",
      "        into grand prize and second place winners (the subslices).\n",
      "        \n",
      "        Members of the population need not be hashable or unique.  If the\n",
      "        population contains repeats, then each occurrence is a possible\n",
      "        selection in the sample.\n",
      "        \n",
      "        Repeated elements can be specified one at a time or with the optional\n",
      "        counts parameter.  For example:\n",
      "        \n",
      "            sample(['red', 'blue'], counts=[4, 2], k=5)\n",
      "        \n",
      "        is equivalent to:\n",
      "        \n",
      "            sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)\n",
      "        \n",
      "        To choose a sample from a range of integers, use range() for the\n",
      "        population argument.  This is especially fast and space efficient\n",
      "        for sampling from a large population:\n",
      "        \n",
      "            sample(range(10000000), 60)\n",
      "    \n",
      "    seed(a=None, version=2) method of Random instance\n",
      "        Initialize internal state from a seed.\n",
      "        \n",
      "        The only supported seed types are None, int, float,\n",
      "        str, bytes, and bytearray.\n",
      "        \n",
      "        None or no argument seeds from current time or from an operating\n",
      "        system specific randomness source if available.\n",
      "        \n",
      "        If *a* is an int, all bits are used.\n",
      "        \n",
      "        For version 2 (the default), all of the bits are used if *a* is a str,\n",
      "        bytes, or bytearray.  For version 1 (provided for reproducing random\n",
      "        sequences from older versions of Python), the algorithm for str and\n",
      "        bytes generates a narrower range of seeds.\n",
      "    \n",
      "    setstate(state) method of Random instance\n",
      "        Restore internal state from object returned by getstate().\n",
      "    \n",
      "    shuffle(x, random=None) method of Random instance\n",
      "        Shuffle list x in place, and return None.\n",
      "        \n",
      "        Optional argument random is a 0-argument function returning a\n",
      "        random float in [0.0, 1.0); if it is the default None, the\n",
      "        standard random.random will be used.\n",
      "    \n",
      "    triangular(low=0.0, high=1.0, mode=None) method of Random instance\n",
      "        Triangular distribution.\n",
      "        \n",
      "        Continuous distribution bounded by given lower and upper limits,\n",
      "        and having a given mode value in-between.\n",
      "        \n",
      "        http://en.wikipedia.org/wiki/Triangular_distribution\n",
      "    \n",
      "    uniform(a, b) method of Random instance\n",
      "        Get a random number in the range [a, b) or [a, b] depending on rounding.\n",
      "    \n",
      "    vonmisesvariate(mu, kappa) method of Random instance\n",
      "        Circular data distribution.\n",
      "        \n",
      "        mu is the mean angle, expressed in radians between 0 and 2*pi, and\n",
      "        kappa is the concentration parameter, which must be greater than or\n",
      "        equal to zero.  If kappa is equal to zero, this distribution reduces\n",
      "        to a uniform random angle over the range 0 to 2*pi.\n",
      "    \n",
      "    weibullvariate(alpha, beta) method of Random instance\n",
      "        Weibull distribution.\n",
      "        \n",
      "        alpha is the scale parameter and beta is the shape parameter.\n",
      "\n",
      "DATA\n",
      "    __all__ = ['Random', 'SystemRandom', 'betavariate', 'choice', 'choices...\n",
      "\n",
      "FILE\n",
      "    d:\\python\\anaconda3\\lib\\random.py\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help('random') # 查看random模块的帮助文档"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on module random:\n",
      "\n",
      "NAME\n",
      "    random - Random variable generators.\n",
      "\n",
      "MODULE REFERENCE\n",
      "    https://docs.python.org/3.9/library/random\n",
      "    \n",
      "    The following documentation is automatically generated from the Python\n",
      "    source files.  It may be incomplete, incorrect or include features that\n",
      "    are considered implementation detail and may vary between Python\n",
      "    implementations.  When in doubt, consult the module reference at the\n",
      "    location listed above.\n",
      "\n",
      "DESCRIPTION\n",
      "        bytes\n",
      "        -----\n",
      "               uniform bytes (values between 0 and 255)\n",
      "    \n",
      "        integers\n",
      "        --------\n",
      "               uniform within range\n",
      "    \n",
      "        sequences\n",
      "        ---------\n",
      "               pick random element\n",
      "               pick random sample\n",
      "               pick weighted random sample\n",
      "               generate random permutation\n",
      "    \n",
      "        distributions on the real line:\n",
      "        ------------------------------\n",
      "               uniform\n",
      "               triangular\n",
      "               normal (Gaussian)\n",
      "               lognormal\n",
      "               negative exponential\n",
      "               gamma\n",
      "               beta\n",
      "               pareto\n",
      "               Weibull\n",
      "    \n",
      "        distributions on the circle (angles 0 to 2pi)\n",
      "        ---------------------------------------------\n",
      "               circular uniform\n",
      "               von Mises\n",
      "    \n",
      "    General notes on the underlying Mersenne Twister core generator:\n",
      "    \n",
      "    * The period is 2**19937-1.\n",
      "    * It is one of the most extensively tested generators in existence.\n",
      "    * The random() method is implemented in C, executes in a single Python step,\n",
      "      and is, therefore, threadsafe.\n",
      "\n",
      "CLASSES\n",
      "    _random.Random(builtins.object)\n",
      "        Random\n",
      "            SystemRandom\n",
      "    \n",
      "    class Random(_random.Random)\n",
      "     |  Random(x=None)\n",
      "     |  \n",
      "     |  Random number generator base class used by bound module functions.\n",
      "     |  \n",
      "     |  Used to instantiate instances of Random to get generators that don't\n",
      "     |  share state.\n",
      "     |  \n",
      "     |  Class Random can also be subclassed if you want to use a different basic\n",
      "     |  generator of your own devising: in that case, override the following\n",
      "     |  methods:  random(), seed(), getstate(), and setstate().\n",
      "     |  Optionally, implement a getrandbits() method so that randrange()\n",
      "     |  can cover arbitrarily large ranges.\n",
      "     |  \n",
      "     |  Method resolution order:\n",
      "     |      Random\n",
      "     |      _random.Random\n",
      "     |      builtins.object\n",
      "     |  \n",
      "     |  Methods defined here:\n",
      "     |  \n",
      "     |  __getstate__(self)\n",
      "     |      # Issue 17489: Since __reduce__ was defined to fix #759889 this is no\n",
      "     |      # longer called; we leave it here because it has been here since random was\n",
      "     |      # rewritten back in 2001 and why risk breaking something.\n",
      "     |  \n",
      "     |  __init__(self, x=None)\n",
      "     |      Initialize an instance.\n",
      "     |      \n",
      "     |      Optional argument x controls seeding, as for Random.seed().\n",
      "     |  \n",
      "     |  __reduce__(self)\n",
      "     |      Helper for pickle.\n",
      "     |  \n",
      "     |  __setstate__(self, state)\n",
      "     |  \n",
      "     |  betavariate(self, alpha, beta)\n",
      "     |      Beta distribution.\n",
      "     |      \n",
      "     |      Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "     |      Returned values range between 0 and 1.\n",
      "     |  \n",
      "     |  choice(self, seq)\n",
      "     |      Choose a random element from a non-empty sequence.\n",
      "     |  \n",
      "     |  choices(self, population, weights=None, *, cum_weights=None, k=1)\n",
      "     |      Return a k sized list of population elements chosen with replacement.\n",
      "     |      \n",
      "     |      If the relative weights or cumulative weights are not specified,\n",
      "     |      the selections are made with equal probability.\n",
      "     |  \n",
      "     |  expovariate(self, lambd)\n",
      "     |      Exponential distribution.\n",
      "     |      \n",
      "     |      lambd is 1.0 divided by the desired mean.  It should be\n",
      "     |      nonzero.  (The parameter would be called \"lambda\", but that is\n",
      "     |      a reserved word in Python.)  Returned values range from 0 to\n",
      "     |      positive infinity if lambd is positive, and from negative\n",
      "     |      infinity to 0 if lambd is negative.\n",
      "     |  \n",
      "     |  gammavariate(self, alpha, beta)\n",
      "     |      Gamma distribution.  Not the gamma function!\n",
      "     |      \n",
      "     |      Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "     |      \n",
      "     |      The probability distribution function is:\n",
      "     |      \n",
      "     |                  x ** (alpha - 1) * math.exp(-x / beta)\n",
      "     |        pdf(x) =  --------------------------------------\n",
      "     |                    math.gamma(alpha) * beta ** alpha\n",
      "     |  \n",
      "     |  gauss(self, mu, sigma)\n",
      "     |      Gaussian distribution.\n",
      "     |      \n",
      "     |      mu is the mean, and sigma is the standard deviation.  This is\n",
      "     |      slightly faster than the normalvariate() function.\n",
      "     |      \n",
      "     |      Not thread-safe without a lock around calls.\n",
      "     |  \n",
      "     |  getstate(self)\n",
      "     |      Return internal state; can be passed to setstate() later.\n",
      "     |  \n",
      "     |  lognormvariate(self, mu, sigma)\n",
      "     |      Log normal distribution.\n",
      "     |      \n",
      "     |      If you take the natural logarithm of this distribution, you'll get a\n",
      "     |      normal distribution with mean mu and standard deviation sigma.\n",
      "     |      mu can have any value, and sigma must be greater than zero.\n",
      "     |  \n",
      "     |  normalvariate(self, mu, sigma)\n",
      "     |      Normal distribution.\n",
      "     |      \n",
      "     |      mu is the mean, and sigma is the standard deviation.\n",
      "     |  \n",
      "     |  paretovariate(self, alpha)\n",
      "     |      Pareto distribution.  alpha is the shape parameter.\n",
      "     |  \n",
      "     |  randbytes(self, n)\n",
      "     |      Generate n random bytes.\n",
      "     |  \n",
      "     |  randint(self, a, b)\n",
      "     |      Return random integer in range [a, b], including both end points.\n",
      "     |  \n",
      "     |  randrange(self, start, stop=None, step=1)\n",
      "     |      Choose a random item from range(start, stop[, step]).\n",
      "     |      \n",
      "     |      This fixes the problem with randint() which includes the\n",
      "     |      endpoint; in Python this is usually not what you want.\n",
      "     |  \n",
      "     |  sample(self, population, k, *, counts=None)\n",
      "     |      Chooses k unique random elements from a population sequence or set.\n",
      "     |      \n",
      "     |      Returns a new list containing elements from the population while\n",
      "     |      leaving the original population unchanged.  The resulting list is\n",
      "     |      in selection order so that all sub-slices will also be valid random\n",
      "     |      samples.  This allows raffle winners (the sample) to be partitioned\n",
      "     |      into grand prize and second place winners (the subslices).\n",
      "     |      \n",
      "     |      Members of the population need not be hashable or unique.  If the\n",
      "     |      population contains repeats, then each occurrence is a possible\n",
      "     |      selection in the sample.\n",
      "     |      \n",
      "     |      Repeated elements can be specified one at a time or with the optional\n",
      "     |      counts parameter.  For example:\n",
      "     |      \n",
      "     |          sample(['red', 'blue'], counts=[4, 2], k=5)\n",
      "     |      \n",
      "     |      is equivalent to:\n",
      "     |      \n",
      "     |          sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)\n",
      "     |      \n",
      "     |      To choose a sample from a range of integers, use range() for the\n",
      "     |      population argument.  This is especially fast and space efficient\n",
      "     |      for sampling from a large population:\n",
      "     |      \n",
      "     |          sample(range(10000000), 60)\n",
      "     |  \n",
      "     |  seed(self, a=None, version=2)\n",
      "     |      Initialize internal state from a seed.\n",
      "     |      \n",
      "     |      The only supported seed types are None, int, float,\n",
      "     |      str, bytes, and bytearray.\n",
      "     |      \n",
      "     |      None or no argument seeds from current time or from an operating\n",
      "     |      system specific randomness source if available.\n",
      "     |      \n",
      "     |      If *a* is an int, all bits are used.\n",
      "     |      \n",
      "     |      For version 2 (the default), all of the bits are used if *a* is a str,\n",
      "     |      bytes, or bytearray.  For version 1 (provided for reproducing random\n",
      "     |      sequences from older versions of Python), the algorithm for str and\n",
      "     |      bytes generates a narrower range of seeds.\n",
      "     |  \n",
      "     |  setstate(self, state)\n",
      "     |      Restore internal state from object returned by getstate().\n",
      "     |  \n",
      "     |  shuffle(self, x, random=None)\n",
      "     |      Shuffle list x in place, and return None.\n",
      "     |      \n",
      "     |      Optional argument random is a 0-argument function returning a\n",
      "     |      random float in [0.0, 1.0); if it is the default None, the\n",
      "     |      standard random.random will be used.\n",
      "     |  \n",
      "     |  triangular(self, low=0.0, high=1.0, mode=None)\n",
      "     |      Triangular distribution.\n",
      "     |      \n",
      "     |      Continuous distribution bounded by given lower and upper limits,\n",
      "     |      and having a given mode value in-between.\n",
      "     |      \n",
      "     |      http://en.wikipedia.org/wiki/Triangular_distribution\n",
      "     |  \n",
      "     |  uniform(self, a, b)\n",
      "     |      Get a random number in the range [a, b) or [a, b] depending on rounding.\n",
      "     |  \n",
      "     |  vonmisesvariate(self, mu, kappa)\n",
      "     |      Circular data distribution.\n",
      "     |      \n",
      "     |      mu is the mean angle, expressed in radians between 0 and 2*pi, and\n",
      "     |      kappa is the concentration parameter, which must be greater than or\n",
      "     |      equal to zero.  If kappa is equal to zero, this distribution reduces\n",
      "     |      to a uniform random angle over the range 0 to 2*pi.\n",
      "     |  \n",
      "     |  weibullvariate(self, alpha, beta)\n",
      "     |      Weibull distribution.\n",
      "     |      \n",
      "     |      alpha is the scale parameter and beta is the shape parameter.\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Class methods defined here:\n",
      "     |  \n",
      "     |  __init_subclass__(**kwargs) from builtins.type\n",
      "     |      Control how subclasses generate random integers.\n",
      "     |      \n",
      "     |      The algorithm a subclass can use depends on the random() and/or\n",
      "     |      getrandbits() implementation available to it and determines\n",
      "     |      whether it can generate random integers from arbitrarily large\n",
      "     |      ranges.\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Data descriptors defined here:\n",
      "     |  \n",
      "     |  __dict__\n",
      "     |      dictionary for instance variables (if defined)\n",
      "     |  \n",
      "     |  __weakref__\n",
      "     |      list of weak references to the object (if defined)\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Data and other attributes defined here:\n",
      "     |  \n",
      "     |  VERSION = 3\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Methods inherited from _random.Random:\n",
      "     |  \n",
      "     |  getrandbits(self, k, /)\n",
      "     |      getrandbits(k) -> x.  Generates an int with k random bits.\n",
      "     |  \n",
      "     |  random(self, /)\n",
      "     |      random() -> x in the interval [0, 1).\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Static methods inherited from _random.Random:\n",
      "     |  \n",
      "     |  __new__(*args, **kwargs) from builtins.type\n",
      "     |      Create and return a new object.  See help(type) for accurate signature.\n",
      "    \n",
      "    class SystemRandom(Random)\n",
      "     |  SystemRandom(x=None)\n",
      "     |  \n",
      "     |  Alternate random number generator using sources provided\n",
      "     |  by the operating system (such as /dev/urandom on Unix or\n",
      "     |  CryptGenRandom on Windows).\n",
      "     |  \n",
      "     |   Not available on all systems (see os.urandom() for details).\n",
      "     |  \n",
      "     |  Method resolution order:\n",
      "     |      SystemRandom\n",
      "     |      Random\n",
      "     |      _random.Random\n",
      "     |      builtins.object\n",
      "     |  \n",
      "     |  Methods defined here:\n",
      "     |  \n",
      "     |  getrandbits(self, k)\n",
      "     |      getrandbits(k) -> x.  Generates an int with k random bits.\n",
      "     |  \n",
      "     |  getstate = _notimplemented(self, *args, **kwds)\n",
      "     |  \n",
      "     |  randbytes(self, n)\n",
      "     |      Generate n random bytes.\n",
      "     |  \n",
      "     |  random(self)\n",
      "     |      Get the next random number in the range [0.0, 1.0).\n",
      "     |  \n",
      "     |  seed(self, *args, **kwds)\n",
      "     |      Stub method.  Not used for a system random number generator.\n",
      "     |  \n",
      "     |  setstate = _notimplemented(self, *args, **kwds)\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Methods inherited from Random:\n",
      "     |  \n",
      "     |  __getstate__(self)\n",
      "     |      # Issue 17489: Since __reduce__ was defined to fix #759889 this is no\n",
      "     |      # longer called; we leave it here because it has been here since random was\n",
      "     |      # rewritten back in 2001 and why risk breaking something.\n",
      "     |  \n",
      "     |  __init__(self, x=None)\n",
      "     |      Initialize an instance.\n",
      "     |      \n",
      "     |      Optional argument x controls seeding, as for Random.seed().\n",
      "     |  \n",
      "     |  __reduce__(self)\n",
      "     |      Helper for pickle.\n",
      "     |  \n",
      "     |  __setstate__(self, state)\n",
      "     |  \n",
      "     |  betavariate(self, alpha, beta)\n",
      "     |      Beta distribution.\n",
      "     |      \n",
      "     |      Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "     |      Returned values range between 0 and 1.\n",
      "     |  \n",
      "     |  choice(self, seq)\n",
      "     |      Choose a random element from a non-empty sequence.\n",
      "     |  \n",
      "     |  choices(self, population, weights=None, *, cum_weights=None, k=1)\n",
      "     |      Return a k sized list of population elements chosen with replacement.\n",
      "     |      \n",
      "     |      If the relative weights or cumulative weights are not specified,\n",
      "     |      the selections are made with equal probability.\n",
      "     |  \n",
      "     |  expovariate(self, lambd)\n",
      "     |      Exponential distribution.\n",
      "     |      \n",
      "     |      lambd is 1.0 divided by the desired mean.  It should be\n",
      "     |      nonzero.  (The parameter would be called \"lambda\", but that is\n",
      "     |      a reserved word in Python.)  Returned values range from 0 to\n",
      "     |      positive infinity if lambd is positive, and from negative\n",
      "     |      infinity to 0 if lambd is negative.\n",
      "     |  \n",
      "     |  gammavariate(self, alpha, beta)\n",
      "     |      Gamma distribution.  Not the gamma function!\n",
      "     |      \n",
      "     |      Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "     |      \n",
      "     |      The probability distribution function is:\n",
      "     |      \n",
      "     |                  x ** (alpha - 1) * math.exp(-x / beta)\n",
      "     |        pdf(x) =  --------------------------------------\n",
      "     |                    math.gamma(alpha) * beta ** alpha\n",
      "     |  \n",
      "     |  gauss(self, mu, sigma)\n",
      "     |      Gaussian distribution.\n",
      "     |      \n",
      "     |      mu is the mean, and sigma is the standard deviation.  This is\n",
      "     |      slightly faster than the normalvariate() function.\n",
      "     |      \n",
      "     |      Not thread-safe without a lock around calls.\n",
      "     |  \n",
      "     |  lognormvariate(self, mu, sigma)\n",
      "     |      Log normal distribution.\n",
      "     |      \n",
      "     |      If you take the natural logarithm of this distribution, you'll get a\n",
      "     |      normal distribution with mean mu and standard deviation sigma.\n",
      "     |      mu can have any value, and sigma must be greater than zero.\n",
      "     |  \n",
      "     |  normalvariate(self, mu, sigma)\n",
      "     |      Normal distribution.\n",
      "     |      \n",
      "     |      mu is the mean, and sigma is the standard deviation.\n",
      "     |  \n",
      "     |  paretovariate(self, alpha)\n",
      "     |      Pareto distribution.  alpha is the shape parameter.\n",
      "     |  \n",
      "     |  randint(self, a, b)\n",
      "     |      Return random integer in range [a, b], including both end points.\n",
      "     |  \n",
      "     |  randrange(self, start, stop=None, step=1)\n",
      "     |      Choose a random item from range(start, stop[, step]).\n",
      "     |      \n",
      "     |      This fixes the problem with randint() which includes the\n",
      "     |      endpoint; in Python this is usually not what you want.\n",
      "     |  \n",
      "     |  sample(self, population, k, *, counts=None)\n",
      "     |      Chooses k unique random elements from a population sequence or set.\n",
      "     |      \n",
      "     |      Returns a new list containing elements from the population while\n",
      "     |      leaving the original population unchanged.  The resulting list is\n",
      "     |      in selection order so that all sub-slices will also be valid random\n",
      "     |      samples.  This allows raffle winners (the sample) to be partitioned\n",
      "     |      into grand prize and second place winners (the subslices).\n",
      "     |      \n",
      "     |      Members of the population need not be hashable or unique.  If the\n",
      "     |      population contains repeats, then each occurrence is a possible\n",
      "     |      selection in the sample.\n",
      "     |      \n",
      "     |      Repeated elements can be specified one at a time or with the optional\n",
      "     |      counts parameter.  For example:\n",
      "     |      \n",
      "     |          sample(['red', 'blue'], counts=[4, 2], k=5)\n",
      "     |      \n",
      "     |      is equivalent to:\n",
      "     |      \n",
      "     |          sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)\n",
      "     |      \n",
      "     |      To choose a sample from a range of integers, use range() for the\n",
      "     |      population argument.  This is especially fast and space efficient\n",
      "     |      for sampling from a large population:\n",
      "     |      \n",
      "     |          sample(range(10000000), 60)\n",
      "     |  \n",
      "     |  shuffle(self, x, random=None)\n",
      "     |      Shuffle list x in place, and return None.\n",
      "     |      \n",
      "     |      Optional argument random is a 0-argument function returning a\n",
      "     |      random float in [0.0, 1.0); if it is the default None, the\n",
      "     |      standard random.random will be used.\n",
      "     |  \n",
      "     |  triangular(self, low=0.0, high=1.0, mode=None)\n",
      "     |      Triangular distribution.\n",
      "     |      \n",
      "     |      Continuous distribution bounded by given lower and upper limits,\n",
      "     |      and having a given mode value in-between.\n",
      "     |      \n",
      "     |      http://en.wikipedia.org/wiki/Triangular_distribution\n",
      "     |  \n",
      "     |  uniform(self, a, b)\n",
      "     |      Get a random number in the range [a, b) or [a, b] depending on rounding.\n",
      "     |  \n",
      "     |  vonmisesvariate(self, mu, kappa)\n",
      "     |      Circular data distribution.\n",
      "     |      \n",
      "     |      mu is the mean angle, expressed in radians between 0 and 2*pi, and\n",
      "     |      kappa is the concentration parameter, which must be greater than or\n",
      "     |      equal to zero.  If kappa is equal to zero, this distribution reduces\n",
      "     |      to a uniform random angle over the range 0 to 2*pi.\n",
      "     |  \n",
      "     |  weibullvariate(self, alpha, beta)\n",
      "     |      Weibull distribution.\n",
      "     |      \n",
      "     |      alpha is the scale parameter and beta is the shape parameter.\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Class methods inherited from Random:\n",
      "     |  \n",
      "     |  __init_subclass__(**kwargs) from builtins.type\n",
      "     |      Control how subclasses generate random integers.\n",
      "     |      \n",
      "     |      The algorithm a subclass can use depends on the random() and/or\n",
      "     |      getrandbits() implementation available to it and determines\n",
      "     |      whether it can generate random integers from arbitrarily large\n",
      "     |      ranges.\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Data descriptors inherited from Random:\n",
      "     |  \n",
      "     |  __dict__\n",
      "     |      dictionary for instance variables (if defined)\n",
      "     |  \n",
      "     |  __weakref__\n",
      "     |      list of weak references to the object (if defined)\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Data and other attributes inherited from Random:\n",
      "     |  \n",
      "     |  VERSION = 3\n",
      "     |  \n",
      "     |  ----------------------------------------------------------------------\n",
      "     |  Static methods inherited from _random.Random:\n",
      "     |  \n",
      "     |  __new__(*args, **kwargs) from builtins.type\n",
      "     |      Create and return a new object.  See help(type) for accurate signature.\n",
      "\n",
      "FUNCTIONS\n",
      "    betavariate(alpha, beta) method of Random instance\n",
      "        Beta distribution.\n",
      "        \n",
      "        Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "        Returned values range between 0 and 1.\n",
      "    \n",
      "    choice(seq) method of Random instance\n",
      "        Choose a random element from a non-empty sequence.\n",
      "    \n",
      "    choices(population, weights=None, *, cum_weights=None, k=1) method of Random instance\n",
      "        Return a k sized list of population elements chosen with replacement.\n",
      "        \n",
      "        If the relative weights or cumulative weights are not specified,\n",
      "        the selections are made with equal probability.\n",
      "    \n",
      "    expovariate(lambd) method of Random instance\n",
      "        Exponential distribution.\n",
      "        \n",
      "        lambd is 1.0 divided by the desired mean.  It should be\n",
      "        nonzero.  (The parameter would be called \"lambda\", but that is\n",
      "        a reserved word in Python.)  Returned values range from 0 to\n",
      "        positive infinity if lambd is positive, and from negative\n",
      "        infinity to 0 if lambd is negative.\n",
      "    \n",
      "    gammavariate(alpha, beta) method of Random instance\n",
      "        Gamma distribution.  Not the gamma function!\n",
      "        \n",
      "        Conditions on the parameters are alpha > 0 and beta > 0.\n",
      "        \n",
      "        The probability distribution function is:\n",
      "        \n",
      "                    x ** (alpha - 1) * math.exp(-x / beta)\n",
      "          pdf(x) =  --------------------------------------\n",
      "                      math.gamma(alpha) * beta ** alpha\n",
      "    \n",
      "    gauss(mu, sigma) method of Random instance\n",
      "        Gaussian distribution.\n",
      "        \n",
      "        mu is the mean, and sigma is the standard deviation.  This is\n",
      "        slightly faster than the normalvariate() function.\n",
      "        \n",
      "        Not thread-safe without a lock around calls.\n",
      "    \n",
      "    getrandbits(k, /) method of Random instance\n",
      "        getrandbits(k) -> x.  Generates an int with k random bits.\n",
      "    \n",
      "    getstate() method of Random instance\n",
      "        Return internal state; can be passed to setstate() later.\n",
      "    \n",
      "    lognormvariate(mu, sigma) method of Random instance\n",
      "        Log normal distribution.\n",
      "        \n",
      "        If you take the natural logarithm of this distribution, you'll get a\n",
      "        normal distribution with mean mu and standard deviation sigma.\n",
      "        mu can have any value, and sigma must be greater than zero.\n",
      "    \n",
      "    normalvariate(mu, sigma) method of Random instance\n",
      "        Normal distribution.\n",
      "        \n",
      "        mu is the mean, and sigma is the standard deviation.\n",
      "    \n",
      "    paretovariate(alpha) method of Random instance\n",
      "        Pareto distribution.  alpha is the shape parameter.\n",
      "    \n",
      "    randbytes(n) method of Random instance\n",
      "        Generate n random bytes.\n",
      "    \n",
      "    randint(a, b) method of Random instance\n",
      "        Return random integer in range [a, b], including both end points.\n",
      "    \n",
      "    random() method of Random instance\n",
      "        random() -> x in the interval [0, 1).\n",
      "    \n",
      "    randrange(start, stop=None, step=1) method of Random instance\n",
      "        Choose a random item from range(start, stop[, step]).\n",
      "        \n",
      "        This fixes the problem with randint() which includes the\n",
      "        endpoint; in Python this is usually not what you want.\n",
      "    \n",
      "    sample(population, k, *, counts=None) method of Random instance\n",
      "        Chooses k unique random elements from a population sequence or set.\n",
      "        \n",
      "        Returns a new list containing elements from the population while\n",
      "        leaving the original population unchanged.  The resulting list is\n",
      "        in selection order so that all sub-slices will also be valid random\n",
      "        samples.  This allows raffle winners (the sample) to be partitioned\n",
      "        into grand prize and second place winners (the subslices).\n",
      "        \n",
      "        Members of the population need not be hashable or unique.  If the\n",
      "        population contains repeats, then each occurrence is a possible\n",
      "        selection in the sample.\n",
      "        \n",
      "        Repeated elements can be specified one at a time or with the optional\n",
      "        counts parameter.  For example:\n",
      "        \n",
      "            sample(['red', 'blue'], counts=[4, 2], k=5)\n",
      "        \n",
      "        is equivalent to:\n",
      "        \n",
      "            sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)\n",
      "        \n",
      "        To choose a sample from a range of integers, use range() for the\n",
      "        population argument.  This is especially fast and space efficient\n",
      "        for sampling from a large population:\n",
      "        \n",
      "            sample(range(10000000), 60)\n",
      "    \n",
      "    seed(a=None, version=2) method of Random instance\n",
      "        Initialize internal state from a seed.\n",
      "        \n",
      "        The only supported seed types are None, int, float,\n",
      "        str, bytes, and bytearray.\n",
      "        \n",
      "        None or no argument seeds from current time or from an operating\n",
      "        system specific randomness source if available.\n",
      "        \n",
      "        If *a* is an int, all bits are used.\n",
      "        \n",
      "        For version 2 (the default), all of the bits are used if *a* is a str,\n",
      "        bytes, or bytearray.  For version 1 (provided for reproducing random\n",
      "        sequences from older versions of Python), the algorithm for str and\n",
      "        bytes generates a narrower range of seeds.\n",
      "    \n",
      "    setstate(state) method of Random instance\n",
      "        Restore internal state from object returned by getstate().\n",
      "    \n",
      "    shuffle(x, random=None) method of Random instance\n",
      "        Shuffle list x in place, and return None.\n",
      "        \n",
      "        Optional argument random is a 0-argument function returning a\n",
      "        random float in [0.0, 1.0); if it is the default None, the\n",
      "        standard random.random will be used.\n",
      "    \n",
      "    triangular(low=0.0, high=1.0, mode=None) method of Random instance\n",
      "        Triangular distribution.\n",
      "        \n",
      "        Continuous distribution bounded by given lower and upper limits,\n",
      "        and having a given mode value in-between.\n",
      "        \n",
      "        http://en.wikipedia.org/wiki/Triangular_distribution\n",
      "    \n",
      "    uniform(a, b) method of Random instance\n",
      "        Get a random number in the range [a, b) or [a, b] depending on rounding.\n",
      "    \n",
      "    vonmisesvariate(mu, kappa) method of Random instance\n",
      "        Circular data distribution.\n",
      "        \n",
      "        mu is the mean angle, expressed in radians between 0 and 2*pi, and\n",
      "        kappa is the concentration parameter, which must be greater than or\n",
      "        equal to zero.  If kappa is equal to zero, this distribution reduces\n",
      "        to a uniform random angle over the range 0 to 2*pi.\n",
      "    \n",
      "    weibullvariate(alpha, beta) method of Random instance\n",
      "        Weibull distribution.\n",
      "        \n",
      "        alpha is the scale parameter and beta is the shape parameter.\n",
      "\n",
      "DATA\n",
      "    __all__ = ['Random', 'SystemRandom', 'betavariate', 'choice', 'choices...\n",
      "\n",
      "FILE\n",
      "    d:\\python\\anaconda3\\lib\\random.py\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import random # 导入random模块\n",
    "help(random) # 查看random模块的帮助文档"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on method gauss in module random:\n",
      "\n",
      "gauss(mu, sigma) method of random.Random instance\n",
      "    Gaussian distribution.\n",
      "    \n",
      "    mu is the mean, and sigma is the standard deviation.  This is\n",
      "    slightly faster than the normalvariate() function.\n",
      "    \n",
      "    Not thread-safe without a lock around calls.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(random.gauss) # 查看random模块中的gauss函数的帮助文档"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2.4 编写代码脚本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[80, 87, 98, 73, 100]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = [80, 87, 98, 73, 100] # 将5个数据组成的列表赋值给变量x\n",
    "x # 查看变量x的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>社区</th>\n",
       "      <th>性别</th>\n",
       "      <th>态度</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A社区</td>\n",
       "      <td>男</td>\n",
       "      <td>反对</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B社区</td>\n",
       "      <td>女</td>\n",
       "      <td>反对</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>D社区</td>\n",
       "      <td>女</td>\n",
       "      <td>反对</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>C社区</td>\n",
       "      <td>男</td>\n",
       "      <td>反对</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>A社区</td>\n",
       "      <td>男</td>\n",
       "      <td>赞成</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75</th>\n",
       "      <td>A社区</td>\n",
       "      <td>女</td>\n",
       "      <td>反对</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>C社区</td>\n",
       "      <td>男</td>\n",
       "      <td>赞成</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>B社区</td>\n",
       "      <td>男</td>\n",
       "      <td>赞成</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>A社区</td>\n",
       "      <td>女</td>\n",
       "      <td>赞成</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>79</th>\n",
       "      <td>C社区</td>\n",
       "      <td>女</td>\n",
       "      <td>反对</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>80 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     社区 性别  态度\n",
       "0   A社区  男  反对\n",
       "1   B社区  女  反对\n",
       "2   D社区  女  反对\n",
       "3   C社区  男  反对\n",
       "4   A社区  男  赞成\n",
       "..  ... ..  ..\n",
       "75  A社区  女  反对\n",
       "76  C社区  男  赞成\n",
       "77  B社区  男  赞成\n",
       "78  A社区  女  赞成\n",
       "79  C社区  女  反对\n",
       "\n",
       "[80 rows x 3 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# import pandas as pd # 导入pandas模块并重命名为pd # 本行代码在初始化阶段已执行，这里不再重复执行\n",
    "example1_1 = pd.read_csv('./pydata/chap01/example1_1.csv', encoding='GBK') # 读取example1_1.csv文件\n",
    "d = example1_1 # 将数据框example1_1赋值给变量d\n",
    "d # 查看变量d的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "438"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = sum(x) # 将列表x中的数据求和并赋值给变量s\n",
    "s # 查看变量s的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = len(x) # 将列表x中的数据个数赋值给变量n\n",
    "n # 查看变量n的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "87.6"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = s/n # 将列表x中的数据求平均数并赋值给变量m\n",
    "m # 查看变量m的值"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.3 Python的数据处理"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3.1 Python的基本数据结构"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2, 3, 4, 5]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = [2, 3, 4, 5] # 生成同类型元素的列表\n",
    "a # 查看变量a的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['甲', '乙', '丙', '丁']"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = ['甲', '乙', '丙', '丁'] # 元素同为字符串的列表\n",
    "b # 查看变量b的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['甲', 23, True, [1, 2, 3]]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c = ['甲', 23, True, [1, 2, 3]] # 元素不同类型的列表\n",
    "c # 查看变量c的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = list(range(10)) # 生成0到9的整数列表\n",
    "d # 查看变量d的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[100, 120, 140, 160, 180]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "e = list(range(100, 200, 20)) # 生成100到199的整数列表，步长为20\n",
    "e # 查看变量e的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2, 3, 4, 5, 6]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.append(6) # 在列表a的末尾添加元素6\n",
    "a # 查看变量a的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['甲', '乙', '戊', '丙', '丁']"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.insert(2, '戊') # 在列表b的第3个位置插入元素'戊'\n",
    "b # 查看变量b的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'戊'"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.pop(2) # 删除列表b的第3个元素并返回该元素"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['甲', '乙', '丙', '丁']"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b # 查看变量b的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2, 3, 4, 5, 6, '甲', '乙', '丙', '丁']"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ab = a + b # 将列表a和b合并为列表ab\n",
    "ab # 查看变量ab的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2, 2, 3, 4, 5, 8]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f = [2, 3, 4, 5, 2, 8] # 创建列表f\n",
    "f.sort() # 对列表f进行排序\n",
    "f # 查看变量f的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['丁', '丙', '乙', '戊', '甲']"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g = ['甲', '乙', '戊', '丙', '丁'] # 创建列表g\n",
    "g.sort() # 对列表g进行排序\n",
    "g # 查看变量g的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'刘文涛': 68, '王宇翔': 85, '田思雨': 74, '徐丽娜': 88, '丁文彬': 63}"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dc1 = {'刘文涛': 68, '王宇翔': 85, '田思雨': 74, '徐丽娜': 88, '丁文彬': 63} # 创建字典dc1\n",
    "dc1 # 查看变量dc1的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'刘文涛': 68, '王宇翔': 85, '田思雨': 74, '徐丽娜': 88, '丁文彬': 63}"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dc2 = dict(刘文涛=68, 王宇翔=85, 田思雨=74, 徐丽娜=88, 丁文彬=63) # 创建字典dc2\n",
    "dc2 # 查看变量dc2的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['刘文涛', '王宇翔', '田思雨', '徐丽娜', '丁文彬'])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dc1.keys() # 查看字典dc1的键"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_values([68, 85, 74, 88, 63])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dc1.values() # 查看字典dc1的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_items([('刘文涛', 68), ('王宇翔', 85), ('田思雨', 74), ('徐丽娜', 88), ('丁文彬', 63)])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dc1.items() # 查看字典dc1的键值对"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "88"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dc1['徐丽娜'] # 查看字典dc1中键为'徐丽娜'的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'刘文涛': 68, '王宇翔': 85, '徐丽娜': 88, '丁文彬': 63}"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "del dc1['田思雨'] # 删除字典dc1中键为'田思雨'的键值对\n",
    "dc1 # 查看变量dc1的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1, 2, 3, 5, 8}"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "set1 = set([2, 2, 2, 1, 8, 3, 3, 5, 5]) # 创建集合set1\n",
    "set1 # 查看变量set1的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1, 2, 3, 4, 5, 6}"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "set2 = {2, 2, 2, 1, 4, 3, 3, 5, 6, 6} # 创建集合set2\n",
    "set2 # 查看变量set2的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1, 2, 3, 4, 5, 6, 8}"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "set1 | set2 # 求集合set1和set2的并集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1, 2, 3, 5}"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "set1 & set2 # 求集合set1和set2的交集"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3.2 numpy中的数组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a1: [5 4 1 2 3]\n",
      "a2: [0 1 2 3 4 5 6 7 8 9]\n",
      "a3: [2.  2.5 3.  3.5 4.  4.5 5.  5.5]\n"
     ]
    }
   ],
   "source": [
    "# 一维数组（向量）\n",
    "a1 = np.array([5, 4, 1, 2, 3]) # 创建数组a1\n",
    "a2 = np.arange(10) # 创建数组a2\n",
    "a3 = np.arange(2, 6, 0.5) # 创建数组a3\n",
    "\n",
    "print('a1:', a1) # 打印数组a1\n",
    "print('a2:', a2) # 打印数组a2\n",
    "print('a3:', a3) # 打印数组a3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2],\n",
       "       [3, 4],\n",
       "       [5, 6]])"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 二维数组（矩阵）\n",
    "a4 = np.array([[1, 2], [3, 4], [5, 6]]) # 创建数组a4\n",
    "a4 # 查看数组a4的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3],\n",
       "       [ 4,  5,  6,  7],\n",
       "       [ 8,  9, 10, 11]])"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a5 = np.arange(12) # 创建数组a5\n",
    "a6 = a5.reshape(3, 4) # 将数组a5转换为3行4列的数组a6\n",
    "a6 # 查看数组a6的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a6.ndim # 查看数组a6的维度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3, 4)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a6.shape # 查看数组a6的形状"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('int32')"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a6.dtype # 查看数组a6的数据类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.,  1.,  2.,  3.],\n",
       "       [ 4.,  5.,  6.,  7.],\n",
       "       [ 8.,  9., 10., 11.]])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a6.astype(float) # 将数组a6的数据类型转换为浮点型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 8,  9, 10, 11])"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a6[2] # 查看数组a6的第3行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.5"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a3[5] # 查看数组a3的第6个元素"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4, 5])"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a1.sort() # 对数组a1进行排序\n",
    "a1 # 查看数组a1的值"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3.3 pandas中的序列和数据框"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    2\n",
       "1    3\n",
       "2    4\n",
       "3    5\n",
       "dtype: int64"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s1 = pd.Series([2, 3, 4, 5]) # 创建序列s1\n",
    "s1 # 查看序列s1的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a    5\n",
       "b    8\n",
       "c    7\n",
       "d    6\n",
       "dtype: int64"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s2 = pd.Series([5, 8, 7, 6], index=['a', 'b', 'c', 'd']) # 创建序列s2, 并指定索引\n",
    "s2 # 查看序列s2的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "甲       60\n",
       "25      80\n",
       "True    50\n",
       "dtype: int64"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s3 = pd.Series([60, 80, 50], index=['甲', 25, True]) # 创建序列s3, 并指定索引, 索引可以是不同类型\n",
    "s3 # 查看序列s3的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a      1\n",
       "b    boy\n",
       "c      3\n",
       "dtype: object"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s4 = pd.Series({'a': 1, 'b': 'boy', 'c': 3}) # 创建序列s4, 以字典形式指定索引和值\n",
    "s4 # 查看序列s4的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    0\n",
       "1    1\n",
       "2    2\n",
       "3    3\n",
       "4    4\n",
       "dtype: int64"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s5 = pd.Series(range(5)) # 创建序列s5, 以range()函数生成的列表作为值\n",
    "s5 # 查看序列s5的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "索引： Index(['a', 'b', 'c', 'd'], dtype='object')\n",
      "数据： [5 8 7 6]\n",
      "类型： int64\n"
     ]
    }
   ],
   "source": [
    "s6 = pd.Series([5, 8, 7, 6], index=['a', 'b', 'c', 'd']) # 创建序列s6\n",
    "print('索引：', s6.index) # 查看序列s6的索引\n",
    "print('数据：', s6.values) # 查看序列s6的值\n",
    "print('类型：', s6.dtype) # 查看序列s6的数据类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "我是索引\n",
       "a    5.0\n",
       "b    8.0\n",
       "c    7.0\n",
       "d    6.0\n",
       "Name: 我是一个Pandas的Series对象, dtype: float64"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s6.name = '我是一个Pandas的Series对象' # 为序列s6命名\n",
    "s6.index.name = '我是索引' # 为序列s6的索引命名\n",
    "s6 # 查看序列s6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "我是索引\n",
       "a    5.0\n",
       "b    8.0\n",
       "c    7.0\n",
       "d    6.0\n",
       "Name: 我是一个Pandas的Series对象, dtype: float64"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s6 = s6.astype(float) # 将序列s6的数据类型转换为浮点型\n",
    "s6 # 查看序列s6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "我是索引\n",
       "a    5.0\n",
       "b    2.0\n",
       "c    7.0\n",
       "d    8.0\n",
       "Name: 我是一个Pandas的Series对象, dtype: float64"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s6[[1, 3]] = [2, 8] # 修改序列s6的第2个和第4个元素的值\n",
    "s6 # 查看序列s6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a    6.0\n",
       "b    NaN\n",
       "c    9.0\n",
       "d    NaN\n",
       "e    NaN\n",
       "dtype: float64"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s7 = pd.Series([1, 2, 3], index=['a', 'c', 'e'], dtype=float) # 创建序列s7\n",
    "s6 + s7 # 对序列s6和s7进行加法运算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加: \n",
      " a     1.0\n",
      "b     3.0\n",
      "c     6.0\n",
      "d    10.0\n",
      "e    15.0\n",
      "dtype: float64 \n",
      " 总和 = 15.0 \n",
      " 平均值 = 3.0\n"
     ]
    }
   ],
   "source": [
    "s8 = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'], dtype=float) # 创建序列s8\n",
    "c = s8.cumsum() # 对序列s8进行累加运算\n",
    "s = s8.sum() # 对序列s8进行求和运算\n",
    "m = s8.mean() # 对序列s8进行求平均值运算\n",
    "print('累加:', '\\n', c, '\\n', '总和 =', s, '\\n', '平均值 =', m) # 打印累加结果、总和和平均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>78</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>95</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>86</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>70</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学   数学  经济学\n",
       "0  刘文涛   68   78   68\n",
       "1  王宇翔   85   95   95\n",
       "2  田思雨   74   86   80\n",
       "3  徐丽娜   88  100  100\n",
       "4  丁文彬   63   70   65"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = {\n",
    "    '姓名': ['刘文涛', '王宇翔', '田思雨', '徐丽娜', '丁文彬'], \n",
    "    '统计学': [68, 85, 74, 88, 63], \n",
    "    '数学': [78, 95, 86, 100, 70], \n",
    "    '经济学': [68, 95, 80, 100, 65]\n",
    "} # 创建字典d\n",
    "table1_1 = pd.DataFrame(d) # 将字典d转换为DataFrame对象table1_1\n",
    "table1_1 # 查看DataFrame对象table1_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>91</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学   数学  经济学\n",
       "0  刘文涛   68   85   84\n",
       "1  王宇翔   85   91   63\n",
       "2  田思雨   74   74   61\n",
       "3  徐丽娜   88  100   49\n",
       "4  丁文彬   63   82   89"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('./pydata/chap01/table1_1.csv', encoding='gbk') # 读取csv文件\n",
    "df_ini = df.copy() # 复制DataFrame对象df\n",
    "df # 查看DataFrame对象df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>数学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>82</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    数学\n",
       "0   85\n",
       "1   91\n",
       "2   74\n",
       "3  100\n",
       "4   82"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[['数学']] # 查看DataFrame对象df的数学1列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>数学</th>\n",
       "      <th>统计学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>85</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>91</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>74</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>100</td>\n",
       "      <td>88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>82</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    数学  统计学\n",
       "0   85   68\n",
       "1   91   85\n",
       "2   74   74\n",
       "3  100   88\n",
       "4   82   63"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[['数学', '统计学']] # 查看DataFrame对象df的数学和统计学2列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "姓名     田思雨\n",
       "统计学     74\n",
       "数学      74\n",
       "经济学     61\n",
       "Name: 2, dtype: object"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[2] # 查看DataFrame对象df的第3行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学  数学  经济学\n",
       "2  田思雨   74  74   61\n",
       "4  丁文彬   63  82   89"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[[2,4]] # 查看DataFrame对象df的第3行和第5行 或者 df.iloc[[2,4]] 两者的区别在于loc是按照索引查找，iloc是按照行号查找"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学   数学  经济学\n",
       "2  田思雨   74   74   61\n",
       "3  徐丽娜   88  100   49\n",
       "4  丁文彬   63   82   89"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[2:4] # 查看DataFrame对象df的第3行到第5行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "      <th>会计学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "      <td>88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>91</td>\n",
       "      <td>63</td>\n",
       "      <td>75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "      <td>92</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "      <td>78</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学   数学  经济学  会计学\n",
       "0  刘文涛   68   85   84   88\n",
       "1  王宇翔   85   91   63   75\n",
       "2  田思雨   74   74   61   92\n",
       "3  徐丽娜   88  100   49   67\n",
       "4  丁文彬   63   82   89   78"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['会计学'] = [88, 75, 92, 67, 78] # 为DataFrame对象df添加会计学列\n",
    "df # 查看DataFrame对象df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>会计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>88</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>75</td>\n",
       "      <td>91</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>92</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>67</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>78</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学  会计学   数学  经济学\n",
       "0  刘文涛   68   88   85   84\n",
       "1  王宇翔   85   75   91   63\n",
       "2  田思雨   74   92   74   61\n",
       "3  徐丽娜   88   67  100   49\n",
       "4  丁文彬   63   78   82   89"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df_ini.copy() # 还原DataFrame对象df\n",
    "df.insert(2, '会计学', [88, 75, 92, 67, 78]) # 为DataFrame对象df插入会计学列\n",
    "df # 查看DataFrame对象df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学  经济学\n",
       "0  刘文涛   68   84\n",
       "1  王宇翔   85   63\n",
       "2  田思雨   74   61\n",
       "3  徐丽娜   88   49\n",
       "4  丁文彬   63   89"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df_ini.copy() # 还原DataFrame对象df\n",
    "df.drop(['数学'], axis=1, inplace=True) # 删除DataFrame对象df的数学列\n",
    "df # 查看DataFrame对象df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学  经济学\n",
       "0  刘文涛   68   84\n",
       "1  王宇翔   85   63\n",
       "3  徐丽娜   88   49\n",
       "4  丁文彬   63   89"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.drop(index=2, inplace=True) # 删除DataFrame对象df的第3行\n",
    "df # 查看DataFrame对象df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>计算机</th>\n",
       "      <th>管理学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>91</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学  计算机  管理学\n",
       "0  刘文涛   68   85   84\n",
       "1  王宇翔   85   91   63\n",
       "2  田思雨   74   74   61\n",
       "3  徐丽娜   88  100   49\n",
       "4  丁文彬   63   82   89"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df_ini.copy() # 还原DataFrame对象df\n",
    "df.rename(columns={'经济学': '管理学', '数学': '计算机'}, inplace=True) # 为DataFrame对象df重命名\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>91</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>85</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学   数学  经济学\n",
       "0  刘文涛   68   85   84\n",
       "1  王宇翔   85   91   63\n",
       "2  田思雨   85   74   61\n",
       "3  徐丽娜   88  100   49\n",
       "4  丁文彬   63   82   89"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df_ini.copy() # 还原DataFrame对象df\n",
    "df.iloc[2, 1] = 85 # 修改DataFrame对象df的第3行第2列的值\n",
    "df # 查看DataFrame对象df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>73</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>90</td>\n",
       "      <td>91</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>79</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>68</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学   数学  经济学\n",
       "0  刘文涛   73   85   84\n",
       "1  王宇翔   90   91   63\n",
       "2  田思雨   79   74   61\n",
       "3  徐丽娜   88  100   49\n",
       "4  丁文彬   68   82   89"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df_ini.copy() # 还原DataFrame对象df\n",
    "df.loc[:, '统计学'] = [73, 90, 79, 88, 68] # 修改DataFrame对象df的统计学列的值\n",
    "df # 查看DataFrame对象df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>91</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学   数学  经济学\n",
       "4  丁文彬   63   82   89\n",
       "0  刘文涛   68   85   84\n",
       "2  田思雨   74   74   61\n",
       "1  王宇翔   85   91   63\n",
       "3  徐丽娜   88  100   49"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "table1_1 = pd.read_csv('./pydata/chap01/table1_1.csv', encoding='gbk') # 读取csv文件\n",
    "table1_1.sort_values(by = '统计学') # 对DataFrame对象table1_1按照统计学列进行升序排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>统计学</th>\n",
       "      <th>经济学</th>\n",
       "      <th>数学</th>\n",
       "      <th>姓名</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>68</td>\n",
       "      <td>84</td>\n",
       "      <td>85</td>\n",
       "      <td>刘文涛</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>85</td>\n",
       "      <td>63</td>\n",
       "      <td>91</td>\n",
       "      <td>王宇翔</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "      <td>74</td>\n",
       "      <td>田思雨</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>88</td>\n",
       "      <td>49</td>\n",
       "      <td>100</td>\n",
       "      <td>徐丽娜</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>63</td>\n",
       "      <td>89</td>\n",
       "      <td>82</td>\n",
       "      <td>丁文彬</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   统计学  经济学   数学   姓名\n",
       "0   68   84   85  刘文涛\n",
       "1   85   63   91  王宇翔\n",
       "2   74   61   74  田思雨\n",
       "3   88   49  100  徐丽娜\n",
       "4   63   89   82  丁文彬"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "table1_1.sort_index(axis=1, ascending=False) # 对DataFrame对象table1_1按照列索引进行降序排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>91</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>李志国</td>\n",
       "      <td>78</td>\n",
       "      <td>84</td>\n",
       "      <td>51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>王智强</td>\n",
       "      <td>90</td>\n",
       "      <td>78</td>\n",
       "      <td>59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>宋丽媛</td>\n",
       "      <td>80</td>\n",
       "      <td>100</td>\n",
       "      <td>53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>袁芳芳</td>\n",
       "      <td>58</td>\n",
       "      <td>51</td>\n",
       "      <td>79</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>张建国</td>\n",
       "      <td>63</td>\n",
       "      <td>70</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学   数学  经济学\n",
       "0  刘文涛   68   85   84\n",
       "1  王宇翔   85   91   63\n",
       "2  田思雨   74   74   61\n",
       "3  徐丽娜   88  100   49\n",
       "4  丁文彬   63   82   89\n",
       "5  李志国   78   84   51\n",
       "6  王智强   90   78   59\n",
       "7  宋丽媛   80  100   53\n",
       "8  袁芳芳   58   51   79\n",
       "9  张建国   63   70   91"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "table1_1 = pd.read_csv('./pydata/chap01/table1_1.csv', encoding='gbk') # 读取csv文件\n",
    "table1_2 = pd.read_csv('./pydata/chap01/table1_2.csv', encoding='gbk') # 读取csv文件\n",
    "mytable = pd.concat([table1_1, table1_2]).reset_index(drop=True) # 将table1_1和table1_2两个DataFrame对象按行合并\n",
    "mytable # 查看合并后的DataFrame对象mytable"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3.4 随机数和数据抽样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "标准正态分布:\n",
      " [-0.31232848  0.33928471 -0.15590853 -0.50178967  0.23556889] \n",
      " 正态分布:\n",
      " [41.18197372 44.52068978 44.56117129 48.47414974 47.63125814] \n",
      " 均匀分布:\n",
      " [9.17629898 2.64146853 7.17773687 8.65715034 8.07079482] \n",
      " 卡方分布:\n",
      " [11.65749531 11.98507727 22.67529789 11.13672652  9.05412533]\n"
     ]
    }
   ],
   "source": [
    "import numpy.random as npr # 导入numpy.random模块\n",
    "\n",
    "npr.seed(15) # 设置随机数种子\n",
    "r1 = npr.standard_normal(size=5) # 生成5个标准正态分布的随机数\n",
    "r2 = npr.normal(loc=50, scale=5, size=5) # 生成5个均值为50，标准差为5的正态分布的随机数\n",
    "r3 = npr.uniform(low=0, high=10, size=5) # 生成5个0到10之间均匀分布的随机数\n",
    "r4 = npr.chisquare(df=15, size=5) # 生成5个自由度为15的卡方分布的随机数\n",
    "print('标准正态分布:\\n', r1, '\\n', '正态分布:\\n', r2, '\\n', '均匀分布:\\n', r3, '\\n', '卡方分布:\\n', r4) # 打印生成的随机数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "无放回抽样:\n",
      " [6, 5, 20, 12, 2, 11, 7, 8, 4, 3] \n",
      " 有放回抽样:\n",
      " [9, 13, 7, 4, 7, 4, 16, 16, 4, 17] \n",
      " 有放回抽样:\n",
      " ['black', 'red', 'red', 'green', 'blue', 'blue']\n"
     ]
    }
   ],
   "source": [
    "a = range(1, 21) # 创建1到20的整数序列\n",
    "n1 = random.sample(population=a, k=10) # 从序列a中随机抽取10个数，无放回\n",
    "n2 = random.choices(population=a, k=10) # 从序列a中随机抽取10个数，有放回\n",
    "Ncols = ['black', 'red', 'green', 'blue', 'yellow'] # 创建颜色序列\n",
    "ncols = random.choices(population=Ncols, k=6) # 从颜色序列中随机抽取6个颜色，有放回\n",
    "print('无放回抽样:\\n', n1, '\\n', '有放回抽样:\\n', n2, '\\n', '有放回抽样:\\n', ncols) # 打印抽样结果"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3.5 数据的读取和保存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>91</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学   数学  经济学\n",
       "0  刘文涛   68   85   84\n",
       "1  王宇翔   85   91   63\n",
       "2  田思雨   74   74   61\n",
       "3  徐丽娜   88  100   49\n",
       "4  丁文彬   63   82   89"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "table1_1 = pd.read_csv('./pydata/chap01/table1_1.csv', encoding='gbk') # 读取csv文件\n",
    "table1_1 # 查看DataFrame对象table1_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>姓名</th>\n",
       "      <th>统计学</th>\n",
       "      <th>数学</th>\n",
       "      <th>经济学</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>刘文涛</td>\n",
       "      <td>68</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>王宇翔</td>\n",
       "      <td>85</td>\n",
       "      <td>91</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>田思雨</td>\n",
       "      <td>74</td>\n",
       "      <td>74</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>徐丽娜</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>丁文彬</td>\n",
       "      <td>63</td>\n",
       "      <td>82</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    姓名  统计学   数学  经济学\n",
       "0  刘文涛   68   85   84\n",
       "1  王宇翔   85   91   63\n",
       "2  田思雨   74   74   61\n",
       "3  徐丽娜   88  100   49\n",
       "4  丁文彬   63   82   89"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_excel('./pydata/chap01/table1_1.xlsx') # 读取excel文件\n",
    "df # 查看DataFrame对象df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "table1_1.to_csv('./pydata/chap01/df1.csv', index=False, encoding='utf-8') \n",
    "# 将DataFrame对象table1_1保存为csv文件 df1.csv，\n",
    "# index=False表示不保存索引，encoding='utf-8'表示保存为utf-8编码格式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "table1_1.to_excel('./pydata/chap01/df2.xlsx', index=False)\n",
    "# 将DataFrame对象table1_1保存为excel文件 df2.xlsx，\n",
    "# index=False表示不保存索引\n",
    "# Python默认编码格式为utf-8，默认保存时使用utf-8编码格式，后续再读取时可以身"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3.6 生成频数分布表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>社区</th>\n",
       "      <th>性别</th>\n",
       "      <th>态度</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A社区</td>\n",
       "      <td>男</td>\n",
       "      <td>反对</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B社区</td>\n",
       "      <td>女</td>\n",
       "      <td>反对</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>D社区</td>\n",
       "      <td>女</td>\n",
       "      <td>反对</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>C社区</td>\n",
       "      <td>男</td>\n",
       "      <td>反对</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>A社区</td>\n",
       "      <td>男</td>\n",
       "      <td>赞成</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    社区 性别  态度\n",
       "0  A社区  男  反对\n",
       "1  B社区  女  反对\n",
       "2  D社区  女  反对\n",
       "3  C社区  男  反对\n",
       "4  A社区  男  赞成"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "example1_1 = pd.read_csv('./pydata/chap01/example1_1.csv', encoding='gbk') # 读取csv文件\n",
    "example1_1.head() # 查看DataFrame对象example1_1的前5行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "社区\n",
       "A社区    27\n",
       "C社区    21\n",
       "B社区    17\n",
       "D社区    15\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "example1_1['社区'].value_counts() # 查看DataFrame对象example1_1的社区列的频数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "社区\n",
       "A社区    33.75\n",
       "C社区    26.25\n",
       "B社区    21.25\n",
       "D社区    18.75\n",
       "Name: proportion, dtype: float64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "example1_1['社区'].value_counts(normalize=True) * 100 # 查看DataFrame对象example1_1的社区列的百分比表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>态度</th>\n",
       "      <th>反对</th>\n",
       "      <th>赞成</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>社区</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A社区</th>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B社区</th>\n",
       "      <td>5</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C社区</th>\n",
       "      <td>7</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D社区</th>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "态度   反对  赞成\n",
       "社区         \n",
       "A社区  13  14\n",
       "B社区   5  12\n",
       "C社区   7  14\n",
       "D社区   6   9"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('./pydata/chap01/example1_1.csv', encoding='gbk') # 读取csv文件\n",
    "tab1 = pd.crosstab(df['社区'], columns=df['态度']) # 生成列联表\n",
    "tab1 # 查看列联表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>态度</th>\n",
       "      <th>反对</th>\n",
       "      <th>赞成</th>\n",
       "      <th>合计</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>社区</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A社区</th>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B社区</th>\n",
       "      <td>5</td>\n",
       "      <td>12</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C社区</th>\n",
       "      <td>7</td>\n",
       "      <td>14</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D社区</th>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>合计</th>\n",
       "      <td>31</td>\n",
       "      <td>49</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "态度   反对  赞成  合计\n",
       "社区             \n",
       "A社区  13  14  27\n",
       "B社区   5  12  17\n",
       "C社区   7  14  21\n",
       "D社区   6   9  15\n",
       "合计   31  49  80"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab2 = pd.crosstab(df['社区'], df['态度'], margins=True, margins_name='合计') # 生成列联表\n",
    "tab2 # 查看列联表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>态度</th>\n",
       "      <th>反对</th>\n",
       "      <th>赞成</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>社区</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A社区</th>\n",
       "      <td>48.15</td>\n",
       "      <td>51.85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B社区</th>\n",
       "      <td>29.41</td>\n",
       "      <td>70.59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C社区</th>\n",
       "      <td>33.33</td>\n",
       "      <td>66.67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D社区</th>\n",
       "      <td>40.00</td>\n",
       "      <td>60.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>合计</th>\n",
       "      <td>38.75</td>\n",
       "      <td>61.25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "态度      反对     赞成\n",
       "社区               \n",
       "A社区  48.15  51.85\n",
       "B社区  29.41  70.59\n",
       "C社区  33.33  66.67\n",
       "D社区  40.00  60.00\n",
       "合计   38.75  61.25"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab3 = pd.crosstab(\n",
    "    df['社区'], df['态度'], \n",
    "    margins=True, margins_name='合计', \n",
    "    normalize='index'\n",
    ") # 生成列联表\n",
    "round(tab3 * 100, 2) # 转换为百分比表，保留两位小数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>态度</th>\n",
       "      <th>反对</th>\n",
       "      <th>赞成</th>\n",
       "      <th>合计</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>社区</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A社区</th>\n",
       "      <td>41.94</td>\n",
       "      <td>28.57</td>\n",
       "      <td>33.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B社区</th>\n",
       "      <td>16.13</td>\n",
       "      <td>24.49</td>\n",
       "      <td>21.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C社区</th>\n",
       "      <td>22.58</td>\n",
       "      <td>28.57</td>\n",
       "      <td>26.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D社区</th>\n",
       "      <td>19.35</td>\n",
       "      <td>18.37</td>\n",
       "      <td>18.75</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "态度      反对     赞成     合计\n",
       "社区                      \n",
       "A社区  41.94  28.57  33.75\n",
       "B社区  16.13  24.49  21.25\n",
       "C社区  22.58  28.57  26.25\n",
       "D社区  19.35  18.37  18.75"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab4 = pd.crosstab(\n",
    "    df['社区'], df['态度'], \n",
    "    margins=True, margins_name='合计', \n",
    "    normalize='columns'\n",
    ") # 生成列联表\n",
    "round(tab4 * 100, 2) # 转换为百分比表，保留两位小数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>态度</th>\n",
       "      <th>反对</th>\n",
       "      <th>赞成</th>\n",
       "      <th>合计</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>社区</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A社区</th>\n",
       "      <td>16.25</td>\n",
       "      <td>17.50</td>\n",
       "      <td>33.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B社区</th>\n",
       "      <td>6.25</td>\n",
       "      <td>15.00</td>\n",
       "      <td>21.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C社区</th>\n",
       "      <td>8.75</td>\n",
       "      <td>17.50</td>\n",
       "      <td>26.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D社区</th>\n",
       "      <td>7.50</td>\n",
       "      <td>11.25</td>\n",
       "      <td>18.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>合计</th>\n",
       "      <td>38.75</td>\n",
       "      <td>61.25</td>\n",
       "      <td>100.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "态度      反对     赞成      合计\n",
       "社区                       \n",
       "A社区  16.25  17.50   33.75\n",
       "B社区   6.25  15.00   21.25\n",
       "C社区   8.75  17.50   26.25\n",
       "D社区   7.50  11.25   18.75\n",
       "合计   38.75  61.25  100.00"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab5 = pd.crosstab(\n",
    "    df['社区'], df['态度'], \n",
    "    margins=True, margins_name='合计', \n",
    "    normalize='all'\n",
    ") # 生成列联表\n",
    "round(tab5* 100, 2) # 转换为百分比表，保留两位小数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>态度</th>\n",
       "      <th>反对</th>\n",
       "      <th>赞成</th>\n",
       "      <th>合计</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>社区</th>\n",
       "      <th>性别</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">A社区</th>\n",
       "      <th>女</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>男</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">B社区</th>\n",
       "      <th>女</th>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>男</th>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">C社区</th>\n",
       "      <th>女</th>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>男</th>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">D社区</th>\n",
       "      <th>女</th>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>男</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>合计</th>\n",
       "      <th></th>\n",
       "      <td>31</td>\n",
       "      <td>49</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "态度      反对  赞成  合计\n",
       "社区  性别            \n",
       "A社区 女    9   9  18\n",
       "    男    4   5   9\n",
       "B社区 女    2   5   7\n",
       "    男    3   7  10\n",
       "C社区 女    2   6   8\n",
       "    男    5   8  13\n",
       "D社区 女    4   7  11\n",
       "    男    2   2   4\n",
       "合计      31  49  80"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab = pd.pivot_table(\n",
    "    df, index=['社区', '性别'],\n",
    "    columns=['态度'], margins=True, margins_name='合计',\n",
    "    aggfunc=len\n",
    ")\n",
    "tab # 查看透视表/多维列联表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>社区</th>\n",
       "      <th>A社区</th>\n",
       "      <th>B社区</th>\n",
       "      <th>C社区</th>\n",
       "      <th>D社区</th>\n",
       "      <th>合计</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>性别</th>\n",
       "      <th>态度</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">女</th>\n",
       "      <th>反对</th>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>赞成</th>\n",
       "      <td>9</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">男</th>\n",
       "      <th>反对</th>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>赞成</th>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>合计</th>\n",
       "      <th></th>\n",
       "      <td>27</td>\n",
       "      <td>17</td>\n",
       "      <td>21</td>\n",
       "      <td>15</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "社区     A社区  B社区  C社区  D社区  合计\n",
       "性别 态度                        \n",
       "女  反对    9    2    2    4  17\n",
       "   赞成    9    5    6    7  27\n",
       "男  反对    4    3    5    2  14\n",
       "   赞成    5    7    8    2  22\n",
       "合计      27   17   21   15  80"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab = pd.pivot_table(\n",
    "    df, index=['性别', '态度'],\n",
    "    columns=['社区'], margins=True, margins_name='合计',\n",
    "    aggfunc=len\n",
    ")\n",
    "tab # 查看透视表/多维列联表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th>性别</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男</th>\n",
       "      <th>合计</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>态度</th>\n",
       "      <th>反对</th>\n",
       "      <th>赞成</th>\n",
       "      <th>反对</th>\n",
       "      <th>赞成</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>社区</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A社区</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B社区</th>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C社区</th>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D社区</th>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>合计</th>\n",
       "      <td>17</td>\n",
       "      <td>27</td>\n",
       "      <td>14</td>\n",
       "      <td>22</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "性别    女       男      合计\n",
       "态度   反对  赞成  反对  赞成    \n",
       "社区                     \n",
       "A社区   9   9   4   5  27\n",
       "B社区   2   5   3   7  17\n",
       "C社区   2   6   5   8  21\n",
       "D社区   4   7   2   2  15\n",
       "合计   17  27  14  22  80"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab = pd.pivot_table(\n",
    "    df, index=['社区'],\n",
    "    columns=['性别', '态度'], \n",
    "    margins=True, margins_name='合计',\n",
    "    aggfunc=len\n",
    ")\n",
    "tab # 查看透视表/多维列联表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>销售额</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>181</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>199</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>188</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   销售额\n",
       "0  272\n",
       "1  181\n",
       "2  225\n",
       "3  199\n",
       "4  188"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('./pydata/chap01/example1_2.csv', encoding='gbk') # 读取csv文件\n",
    "df.head() # 查看DataFrame对象df的前5行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "销售额分组\n",
       "[160, 170)     2\n",
       "[170, 180)     4\n",
       "[180, 190)     7\n",
       "[190, 200)    17\n",
       "[200, 210)    27\n",
       "[210, 220)    20\n",
       "[220, 230)    16\n",
       "[230, 240)    13\n",
       "[240, 250)     7\n",
       "[250, 260)     4\n",
       "[260, 270)     2\n",
       "[270, 280)     1\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f = pd.cut(\n",
    "    df['销售额'],\n",
    "    bins=[160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280],\n",
    "    right=False # 不包含右端点\n",
    ")\n",
    "tf = f.value_counts() # 查看频数表\n",
    "tab = tf.sort_index() # 按照区间排序\n",
    "tab.index.name = '销售额分组' # 修改索引名称\n",
    "tab # 查看频数表"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.4 Python绘图基础"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.4.1 Python的主要绘图模块"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.4.2 基本绘图函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(100) # 设置随机数种子\n",
    "x = np.random.standard_normal(200) # 生成标准正态分布的随机数\n",
    "y = 1 + 2 * x + np.random.normal(0, 1, 200) # 生成y\n",
    "\n",
    "plt.figure(figsize=(8, 6)) # 设置图形大小\n",
    "plt.scatter(x, y, marker='o', color='None', edgecolors='black') # 绘制散点图\n",
    "\n",
    "fit = np.poly1d(np.polyfit(x, y, deg=1)) # 拟合一次多项式\n",
    "y_hat = fit(x) # 拟合值\n",
    "plt.plot(x, y_hat, c='b') # 绘制拟合曲线\n",
    "\n",
    "plt.plot(np.mean(x), np.mean(y), 'ro', markersize=20, fillstyle='bottom') # 绘制均值点\n",
    "plt.axhline(y=np.mean(y), color='black', linestyle='--', linewidth=1) # 绘制水平参考线\n",
    "plt.axvline(x=np.mean(x), color='black', linestyle=(0, (5, 10)), linewidth=1) # 绘制垂直参考线\n",
    "\n",
    "plt.grid(linestyle=':') # 绘制网格线\n",
    "\n",
    "ax = plt.gca() # 获取当前坐标轴\n",
    "ax.spines['right'].set_color('#4169E1') # 设置边框颜色\n",
    "ax.spines['left'].set_color('#4169E1')\n",
    "ax.spines['top'].set_color('royalblue')\n",
    "ax.spines['bottom'].set_color('b')\n",
    "\n",
    "plt.text(\n",
    "    x=0.4, y=-3, s=r'$\\hat{y} = \\hat{\\beta}_0 + \\hat{\\beta}_1x$',\n",
    "    fontdict={'size': 12, 'bbox': {'facecolor': 'pink', 'boxstyle': 'round'}}, ha='center'\n",
    ") # 添加文本\n",
    "plt.annotate(\n",
    "    text=r'均值点', xy=(np.mean(x), np.mean(y)), xytext=(-0.6, 3),\n",
    "    arrowprops={'headwidth': 10, 'headlength': 5, 'width': 4, 'facecolor': 'r', 'shrink': 0.1},\n",
    "    fontsize=14, color='red', ha='right'\n",
    ") # 添加注释\n",
    "\n",
    "plt.title('散点图及拟合直线\\n并为图形增加新的元素', fontsize=14) # 添加标题\n",
    "plt.xlabel('x = 自变量', fontsize=10) # 添加x轴标签\n",
    "plt.ylabel('y = 因变量', fontsize=10) # 添加y轴标签\n",
    "plt.legend(['样本点', '拟合直线'], loc='best') # 添加图例\n",
    "\n",
    "plt.show() # 显示图形"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.4.3 图形布局"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1000x700 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(1010) # 设置随机数种子\n",
    "plt.subplots(nrows=2, ncols=2, figsize=(10, 7)) # 创建2行2列的图形区域\n",
    "\n",
    "plt.subplot(221) # 选择第1个子图\n",
    "plt.scatter(\n",
    "    x = range(100), y = np.random.randint(low=0, high=100, size=100),\n",
    "    marker = '^', c='red'\n",
    ") # 绘制散点图\n",
    "\n",
    "plt.subplot(222) # 选择第2个子图\n",
    "plt.hist(\n",
    "    np.random.normal(loc=5, scale=10, size=100),\n",
    "    bins=10, color='lightgreen'\n",
    ") # 绘制直方图\n",
    "\n",
    "plt.subplot(223) # 选择第3个子图\n",
    "plt.plot(\n",
    "    range(20), np.random.normal(5, 10, 20), \n",
    "    marker='o', linestyle='-.', linewidth=2, markersize=8\n",
    ")\n",
    "\n",
    "plt.subplot(224) # 选择第4个子图\n",
    "plt.bar(\n",
    "    x=range(5), height=range(5, 0, -1),\n",
    "    color=['cyan', 'pink']\n",
    ") # 绘制条形图\n",
    "\n",
    "plt.show() # 显示图形"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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u6HTqaysLHV0dIzaJhAIqL+/X8uXL9elS5fkdDq1Y8eOex4vOztbksY8XjgcVigUumMDko25AADpyTWRnY0xI8oOh2PU/YuKinTjxg3l5+dLkqqqqrR169Z7Hu/2z2Mdr7a2Vjt37pxIl4GEYC4AQPqxfqYpPz9fXV1d0XIkElEgEFBeXt6obaZMmRJdJCQpKysr+hfx3cfr7u6WpDGPV11drWAwGN14+QL3A3MBANKTdWiqqKjQ2bNnNTg4KElqaGiQy+VSaWnpqG3279+vZcuWRcstLS0qLCyMHu/06dPRujNnzqiwsFAzZswY9Xhut1s+n++ODUg25gIApCfr0FReXq7c3FzV1NTo2rVr2rVrl9auXavMzEyFQiENDAyMaLN06VKdPn1aR44c0ZUrV7Rv3z5t3rxZkrRmzRq1tbXpwIEDam5u1p49e7Rp06a4nRiQKMwFAEhTE/mo3blz50xxcbFxu93m8ccfN52dncYYY2bNmmUOHz58zzZvvfWWKSgoMLm5ueY73/mO+eyzz6J1x48fN3PmzDEej8c89dRTpre3d0If/eNj1vhPybw/MBcAIPXF+7HRYcxd72idREKhkPx+v4LBIC9PIK3vD+l87gAwmng/NvLdcwAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYITQAAABYmFJrq6+tVUlIij8ejyspKdXZ2jtvm3LlzWrBggXw+n9asWaObN29G6/Ly8uRwOKLbwoULJ34GwH3AXACA9GMdmoaGhrRu3TqtWrVKTU1N8ng82rZt27htnn76aVVWVurixYvq7OzUSy+9FK0PBAK6fPmyenp61NPTo7q6uphPBEgW5gIApClj6eOPPzY+n88MDAwYY4w5d+6c8Xg85tatW6O2aWpqMpKi++zfv98UFxcbY4zp7+83kkw4HLbtwgjBYNBIMsFgMOZj4MGRrPsDcwEAJod4PzZaP9N06tQplZWVyeVySZJKSkoUiURUX18/apvMzEy9/vrr8nq9kqTu7m55PB5Jw39ZZ2RkaOPGjfJ4PFqyZImuX78eS+4Dkoq5AADpyTo0tbe3Kycn598NnU5lZWWpo6Nj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np7oNlnFMgb/qaen54H49Fys4/C1r33NfPvb3zaffPKJ+frXv25eeOGFZHY7rmJdF6ZMmWLeeecd8/e//91s3LjRLF68ONldT4hkrgspG5qMif83yU9WsYzDW2+9ZQoKCkxubq75zne+M+4D6mRx9+RIl/sCc2HiY/Dyyy8bSSO2ySyW+8FtD0poMia2cbhy5Yp59NFHjdfrNatWrTI3b95MYo/jL5Yx+MUvfmHmzJljvF6vWbFihfnkk0+S2OPESea6wBf2AgAAWEjZ9zQBAACkEkITAACABUITAACABUITAACABUITAACABUITAACABUITAACABUITAACABUITAACABUITAACABUITAACABUITAACABUITAACABUITAACABUITAACABUITAACAhQmHpra2Nj322GM6f/681f7Hjx/X3Llz5fV6tWHDBvX19VnVAQAApJIJhabnnntO06dP18mTJ632DwQCWr9+vbZv367GxkY1Nzdr9+7d49YBAACkmgmFpt27d+vq1avW+x8+fFgPP/yw/vu//1uFhYX6n//5H7399tvj1gEAAKSaCYWmnJwcFRYWWu9/6tQpLV68OFpetGiRWlpa1NraOmYdAABAqnEl8uDt7e2aP39+tJydnS1J6ujoGLNu5syZ9zxeOBxWOByOloeGhnTz5k1lZ2fL4XAk4hQAAMAkZYzRp59+qunTp8vp/PyffUtoaJKGO3z3z7cDzlh191JbW6udO3cmopsAAOAB1draqocffvhzHyehoSk/P19dXV3Rcnd3tyQpLy9vzLrRVFdXa/v27dFyMBhUQUGBWltb5fP54t19AAAwiYVCIc2cOVNTp06Ny/ESGpoqKipUW1sbLZ85c0aFhYWaMWPGmHWjcbvdcrvdI273+XyEJgAAcE/xegtPXP65ZSgU0sDAwIjb16xZo7a2Nh04cEDNzc3as2ePNm3aNG4dAABAqolLaCouLtbRo0dH3O73+/Xee+9p7969mjdvnmbPnq3q6upx6wAAAFKNw/znu7EnmVAoJL/fr2AwyMtzAADgDvHOCXz3HAAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAAgAVCEwAA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",
      "text/plain": [
       "<Figure size 600x500 with 5 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(6, 5)) # 创建图形区域\n",
    "grid = plt.GridSpec(3, 3) # 创建网格布局\n",
    "plt.subplot(grid[0, :2]) # 占据第1行的前2列\n",
    "plt.subplot(grid[0, 2]) # 占据第1行的第3列\n",
    "plt.subplot(grid[1, :1]) # 占据第2行的前1列\n",
    "plt.subplot(grid[1, 1:]) # 占据第2行的后2列\n",
    "plt.subplot(grid[2, :3]) # 占据第3行的所有列\n",
    "\n",
    "fig.tight_layout() # 调整子图之间的间距\n",
    "plt.show() # 显示图形"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAG4CAYAAABYTdNvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAuIUlEQVR4nO3de2xbZZ7/8Y+NWdcxtTckkZI2adMqKqJsg1MglbrJsMwl/JOqqJFKi8oO/1TQLhKbMkUKGnDJUqWAiNjVMICEuggqQI1QQdMiKiSWsISpCHXaMpkyhKHZpENum9Q2uI1JnPP7Iz/M0lz62PUll/dLOlKf6Hw5Xz86j/3BPvaxWZZlCQAAALOyZ7sBAACA+YDQBAAAYIDQBAAAYIDQBAAAYIDQBAAAYIDQBAAAYIDQBAAAYIDQBAAAYIDQBAAAYCDh0NTX16fbb79dp06dMtr/+PHjWrNmjdxut7Zt26aLFy8mekgAwBzG6wIWi4RC0/33369ly5bpo48+Mto/GAxq69at2rNnjzo7O9Xd3a39+/cn1SgAYO7hdQGLSUKhaf/+/Tp37pzx/keOHFFxcbEeeOABlZaW6pFHHtGhQ4cSbhIAMDfxuoDFJKHQlJ+fr9LSUuP929ratHHjxvh4w4YN6unpUW9vbyKHBQDMUbwuYDFxpPM/3t/fr3Xr1sXHeXl5kqSBgQGVlJRMWxONRhWNRuPjiYkJjYyMKC8vTzabLZ3tAsCCYFmWvv32Wy1btkx2+9z6vg+vC8ikVK+FtIYmabLhy/8920ne1NSkJ554It1tAcCC19vbq+Li4my3MQWvC8i0VK2FtIamoqIiDQ0NxcfDw8OSpMLCwhlrGhoatGfPnvg4FAppxYoV6u3tlcfjSV+zALBAhMNhlZSUaOnSpdluZQpeF5BJqV4LaQ1N1dXVampqio9PnDih0tJSLV++fMYap9Mpp9M55e8ej4fFAQAJmIsfXfG6gGxI1VpIyYfd4XBYY2NjU/6+efNm9fX16YUXXlB3d7eeeeYZ7dixIxWHBADMYbwuYCFKSWgqLy/XsWPHpvzd6/Xq8OHDam5u1tq1a7Vq1So1NDSk4pAAgDmM1wUsRDbr/16RNweFw2F5vV6FQiHehgUAAwv9eXOhPz6kTqrPlbn1XVQAAIA5itAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABggNAEAABgIKHQFAgE5PP55HK5VFNTo8HBwSvWtLa2qry8XB6PR1u3btWFCxeSbhYAACBbjEPTxMSE6urqVFtbq66uLrlcLtXX189a8+233+quu+7Sww8/rM7OTo2Ojmrv3r1X3TQAAECmGYem1tZWjYyMaN++fSouLpbf79eRI0cUiURmrPniiy906dIl/frXv1ZJSYm2b9+uP/7xjylpHAAAIJOMQ1NbW5sqKyvlcDgkST6fT7FYTIFAYMaa1atXy+FwqLW1VbFYTO+//758Pt9VNw0AAJBpDtMd+/v7lZ+fHx/b7Xbl5uZqYGBgxpq8vDy98soruuOOO3Tttddq+fLlam9vn/U40WhU0Wg0Pg6Hw6YtAgAApE1CF4JbljVlbLPZZty/r69PDz74oA4ePKjPPvtMt9122xWvg2pqapLX641vJSUlibQIAACQFsahqaioSENDQ/FxLBZTMBhUYWHhjDWHDx/WDTfcoPvuu0/r1q3TgQMHdOjQIYVCoRlrGhoaFAqF4ltvb69piwAAAGljHJqqq6vV3t6u8fFxSVJHR4ccDocqKipmrLnmmmsUi8Xi4/HxcVmWFb8uajpOp1Mej+cnGwAAQLYZh6aqqioVFBTI7/fr/Pnzamxs1JYtW5STk6NwOKyxsbEpNXfccYc+/fRTvfnmm+rp6ZHf79fGjRvldrtT+iAAAADSzTg02e12tbS06OjRoyorK9Po6Kiam5slSeXl5Tp27NiUmptuukkHDx7UY489prVr12poaEivvfZa6roHAADIEJt1+dXdc0w4HJbX61UoFOKjOgAwsNCfNxf640PqpPpc4d5zAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghN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YmJCdXV1qq2tVVdXl1wul+rr669Yc88996impkZnzpzR4OCgHn/88atuGgAAINMcpju2trZqZGRE+/btk8PhkN/vV1VVlSKRiNxu97Q1X3/9tb788ks99thjcrvduvfee/XSSy+lrHkAAIBMMX6nqa2tTZWVlXI4JnOWz+dTLBZTIBCYsSYnJ0fPPfdcPFQNDw/L5XJdZcsAAACZZ/xOU39/v/Lz8+Nju92u3NxcDQwMzFizbNkyPfTQQ5KkUCikl19+WY888sisx4lGo4pGo/FxOBw2bREAACBtEroQ3LKsKWObzXbFukgkok2bNqmiokK7du2add+mpiZ5vd74VlJSkkiLAAAAaWEcmoqKijQ0NBQfx2IxBYNBFRYWzlp38eJF3XnnncrJydGbb74pu332QzY0NCgUCsW33t5e0xYBAADSxjg0VVdXq729XePj45Kkjo4OORwOVVRUzFq3e/duud1uvfPOO1qyZMkVj+N0OuXxeH6yAQAAZJtxaKqqqlJBQYH8fr/Onz+vxsZGbdmyRTk5OQqHwxobG5tSc/r0ab399tv63e9+p0uXLikYDCoYDKayfwAAgIwwDk12u10tLS06evSoysrKNDo6qubmZklSeXm5jh07NqXm7bffVigU0po1a5SbmxvfAAAA5hubdfnV3XNMOByW1+tVKBTiozoAMLDQnzcX+uND6qT6XOHecwAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQCApAUCAfl8PrlcLtXU1GhwcNC49tVXX5XNZlN3d3f6GgRSiNAEAEjKxMSE6urqVFtbq66uLrlcLtXX1xvVBoNB7d27N80dAqlFaAIAJKW1tVUjIyPat2+fiouL5ff7deTIEUUikSvWPvroo9q4cWMGugRSh9AEAEhKW1ubKisr5XA4JEk+n0+xWEyBQGDWupMnT6qlpUVPP/10JtoEUsaR7QYAAPNTf3+/8vPz42O73a7c3FwNDAzMWDMxMaFdu3bpySefVEFBgdFxotGootFofBwOh5NvGrgKvNMEAEiaZVlTxjabbcb9X3rpJdlsNu3cudP4GE1NTfJ6vfGtpKQk6X6Bq0FoAgAkpaioSENDQ/FxLBZTMBhUYWHhjDWHDx/WmTNndP3112vlypWSpPLycn388ccz1jQ0NCgUCsW33t7e1D0IIAF8PAcASEp1dbWeeuopjY+Py+FwqKOjQw6HQxUVFTPWvPHGGxodHZU0+THbzTffrHfffVe33nrrjDVOp1NOpzPl/QOJ4p0mAEBSqqqqVFBQIL/fr/Pnz6uxsVFbtmxRTk6OwuGwxsbGptQUFhaqtLRUpaWlWrFihSSpuLhYS5YsyXT7QMIITQCApNjtdrW0tOjo0aMqKyvT6OiompubJU1+5Hbs2LEsdwikFh/PAQCStn79ep0+fXrK301+5fvv//7vp1xIDsxlvNMEAABgIKHQlMw9ho4fP641a9bI7XZr27ZtunjxYtLNAgAAZItxaErmHkPBYFBbt27Vnj171NnZqe7ubu3fv/+qmwYAAMg049CUzD2Gjhw5ouLiYj3wwAMqLS3VI488okOHDqWkcQAAgEwyDk3J3GOora3tJzdk3LBhg3p6evhhMgAAMO8Yf3sumXsM9ff3a926dfFxXl6eJGlgYGDGn8G//B5DoVBIEvcaAgBTPzxf8s00ILUS+smBRO8xdHnND/+eraapqUlPPPHElL9zryEASMzw8LC8Xm+22wAWDOPQVFRUpLNnz8bHJvcYuvy+RMPDw5I0a01DQ4P27NkTHweDQa1cuVI9PT2LevGHw2GVlJSot7dXHo8n2+1kFXPxI+biR8zFj0KhkFasWKHrr78+260AC4pxaErmHkPV1dVqamqKj0+cOKHS0lItX758xpqZ7jHk9XoX/ROhJHk8Hubh/2MufsRc/Ii5+JHdzk/xAalkvKKSucfQ5s2b1dfXpxdeeEHd3d165plntGPHjpQ+AAAAgEwwDk3J3GPI6/Xq8OHDam5u1tq1a7Vq1So1NDSkrnsAAIAMSehC8GTuMVRTU6Ourq6EG/uB0+mU3++f9iO7xYR5+BFz8SPm4kfMxY+YCyA9bBbfSQUAzCPhcFher1ehUIjr1zCrVJ8rXCUIAABggNAEAABggNAEAABgIOuhKRAIyOfzyeVyqaamRoODg1esOX78uNasWSO3261t27bp4sWLGeg0vZKZh5MnT2r9+vXyeDzavHmzRkZGMtBp+iUzFz949dVXZbPZZv1ywnySzFyEw2HV1dXJ7XZrw4YN+uqrrzLQafolMxetra0qLy+Xx+PR1q1bdeHChQx0mn59fX26/fbbderUKaP9F+JzJpANWQ1NExMTqqurU21trbq6uuRyuVRfXz9rTTAY1NatW7Vnzx51dnaqu7tb+/fvz1DH6ZHMPExMTOiee+5RTU2Nzpw5o8HBQT3++OMZ6jh9kpmLHwSDQe3duzfNHWZOsnOxd+9eLV26VJ2dnbr55pu1e/fuDHSbXsnMxbfffqu77rpLDz/8sDo7OzU6Orogzo/7779fy5Yt00cffWS0/0J8zgSyxsqiDz74wPJ4PNbY2JhlWZZ18uRJy+VyWd99992MNQcPHrTWrl0bH7/11lvWihUr0t5rOiUzD11dXZak+D7PP/+8VV5enpF+0ymZufjBrl27rLvuusuSZJ07dy7NnaZfMnNx8eJFKzc31/rf//1fy7Isq7+/3/rDH/6QkX7TKZm5+PTTTy2n0xkfv/766z957pivhoaGrHPnzlmSrI6OjivuvxCfM0OhkCXJCoVC2W4Fc1yqz5WsvtPU1tamyspKORyTPxfl8/kUi8UUCARmrdm4cWN8vGHDBvX09Ki3tzft/aZLMvOQk5Oj5557Tm63W9Lkff1cLldG+k2nZOZCmvyosqWlRU8//XQm2syIZObi9OnTWrp0qZ599lldd9112r59uyorKzPVctokMxerV6+Ww+FQa2urYrGY3n//ffl8vgx1nD75+fkqLS013n8hPmcC2ZLV0NTf36/8/Pz42G63Kzc3VwMDA8Y1eXl5kjRrzVyXzDwsW7ZMDz30kKTJm3O+/PLLuvfee9Pea7olMxcTExPatWuXnnzySRUUFGSizYxIZi76+vo0NDSkSCSizz//XDabbUH8Cn8yc5GXl6dXXnlFd9xxh3JycvThhx/qP/7jPzLR7pyyEJ8zgWzJ+oXg1mW/rWlZlmw2m3HND/++Us1cl8w8SFIkEtGmTZtUUVGhXbt2pau9jEp0Ll566SXZbDbt3Lkz3a1lXKJzEYlE9P333+vAgQNatWqVdu7cqffeey/dbWZEonPR19enBx98UAcPHtRnn32m2267zfj6uIVmIT5nAtmQ1dBUVFSkoaGh+DgWiykYDKqwsNC4Znh4WJJmrZnrkpkHSbp48aLuvPNO5eTk6M0331wQdzRPZi4OHz6sM2fO6Prrr9fKlSslTd4P8eOPP057v+mUzFx4vV4tWbIk/lFtXl5efI3MZ8meFzfccIPuu+8+rVu3TgcOHNChQ4cUCoUy0fKcsRCfM4FsyeqrbHV1tdrb2zU+Pi5J6ujokMPhUEVFxaw1n3zySXx84sQJlZaWavny5WnvN12SmQdJ2r17t9xut9555x0tWbIkE62mXTJz8cYbb+js2bM6deqU/vu//1uS9O677+rWW2/NSM/pksxc3HjjjYpEIvrmm28kTX4EsxBeHJOZi2uuuUaxWCw+Hh8fl2VZ8euiFouF+JwJZE1KLidPUiwWs1avXm09+uijVm9vr7Vp0yZrx44dlmVNXvH+/fffT6kJBoOW1+u1fv/731vnzp2zKisrrd/+9reZbj2lkpmHU6dOWV6v1/ryyy+tCxcuxLf5Lpm5+L8uXLiwYL49l+xc3HLLLdY///M/W3/961+tf/zHf7QefPDBTLadFsnMxZ/+9Cfr2muvtd544w3rf/7nf6zt27dbGzduzHTraaPLvj23mJ4z+fYcTKX6XMlqaLKsya8Ol5eXW06n0/rVr35lDQ4OWpZlWStXrrSOHDkybc3x48etsrIyy+VyWXfffbcViUQy2HF6JDoP+/btsyRN2RaCZM6JHyyk0GRZyc3FX/7yF+u2226z3G63VVtba42MjGSw4/RJZi5ee+01q6yszHK73dYvf/lL669//WsGO06vy0PTYnrOJDTBVKrPFZtlXXZ1JQAAc1iq71yPhSvV58r8v3IYAAAgAwhNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABhIOTX19fbr99tt16tQpo/2PHz+uNWvWyO12a9u2bbp48WKihwTmJNYCACwuCYWm+++/X8uWLdNHH31ktH8wGNTWrVu1Z88edXZ2qru7W/v370+qUWAuYS0AwOKTUGjav3+/zp07Z7z/kSNHVFxcrAceeEClpaV65JFHdOjQoYSbBOYa1gIALD4Jhab8/HyVlpYa79/W1qaNGzfGxxs2bFBPT496e3sTOSww57AWAGDxcaTzP97f369169bFx3l5eZKkgYEBlZSUTFsTjUYVjUbj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",
      "text/plain": [
       "<Figure size 600x450 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(6, 4.5)) # 创建图形区域\n",
    "\n",
    "ax1 = plt.subplot2grid((3, 3), (0, 0), rowspan=2, colspan=2) # 第1行第1幅图占据2行2列\n",
    "ax2 = plt.subplot2grid((3, 3), (0, 2), rowspan=3, colspan=1) # 第1行第3幅图占据3行1列\n",
    "ax3 = plt.subplot2grid((3, 3), (2, 0), rowspan=1, colspan=1) # 第3行第1幅图占据1行1列\n",
    "ax4 = plt.subplot2grid((3, 3), (2, 1), rowspan=1, colspan=1) # 第3行第2幅图占据1行1列\n",
    "\n",
    "fig.tight_layout() # 调整子图之间的间距\n",
    "plt.show() # 显示图形"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 700x400 with 5 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(7, 4)) # 创建图形区域\n",
    "spec = fig.add_gridspec(\n",
    "    nrows=2, ncols=6, \n",
    "    width_ratios=[1, 1, 1, 1, 1, 1], height_ratios=[1, 2] # 设置宽高比\n",
    ") # 创建网格布局\n",
    "fig.add_subplot(spec[0, 1:3]) # 占据第1行的第2、3列\n",
    "fig.add_subplot(spec[0, 3:]) # 占据第1行的后3列\n",
    "ax = fig.add_subplot(spec[:, 0]) # 占据所有行的第1列\n",
    "ax = fig.add_subplot(spec[1, 1:4]) # 占据第2行的第2、3、4列\n",
    "ax = fig.add_subplot(spec[1, 4:]) # 占据第2行的后2列\n",
    "\n",
    "fig.tight_layout() # 调整子图之间的间距\n",
    "plt.show() # 显示图形"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.4.4 图形颜色、线型和标记"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 习题"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>收入户等级</th>\n",
       "      <th>2016年</th>\n",
       "      <th>2017年</th>\n",
       "      <th>2018年</th>\n",
       "      <th>2019年</th>\n",
       "      <th>2020年</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>低收入户</td>\n",
       "      <td>3750</td>\n",
       "      <td>4647</td>\n",
       "      <td>6545</td>\n",
       "      <td>8004</td>\n",
       "      <td>10422</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>中等偏下户</td>\n",
       "      <td>7338</td>\n",
       "      <td>9330</td>\n",
       "      <td>12674</td>\n",
       "      <td>17024</td>\n",
       "      <td>21636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>中等收入户</td>\n",
       "      <td>10508</td>\n",
       "      <td>13506</td>\n",
       "      <td>18277</td>\n",
       "      <td>24832</td>\n",
       "      <td>31685</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>中等偏上户</td>\n",
       "      <td>14823</td>\n",
       "      <td>19404</td>\n",
       "      <td>26044</td>\n",
       "      <td>35576</td>\n",
       "      <td>45639</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>高收入户</td>\n",
       "      <td>28225</td>\n",
       "      <td>36957</td>\n",
       "      <td>49175</td>\n",
       "      <td>67132</td>\n",
       "      <td>85541</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   收入户等级  2016年  2017年  2018年  2019年  2020年\n",
       "0   低收入户   3750   4647   6545   8004  10422\n",
       "1  中等偏下户   7338   9330  12674  17024  21636\n",
       "2  中等收入户  10508  13506  18277  24832  31685\n",
       "3  中等偏上户  14823  19404  26044  35576  45639\n",
       "4   高收入户  28225  36957  49175  67132  85541"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建DataFrame数据框，并保存至csv\n",
    "data = {\n",
    "    '收入户等级': ['低收入户', '中等偏下户', '中等收入户', '中等偏上户', '高收入户'],\n",
    "    '2016年': [3750, 7338, 10508, 14823, 28225],\n",
    "    '2017年': [4647, 9330, 13506, 19404, 36957],\n",
    "    '2018年': [6545, 12674, 18277, 26044, 49175],\n",
    "    '2019年': [8004, 17024, 24832, 35576, 67132],\n",
    "    '2020年': [10422, 21636, 31685, 45639, 85541]\n",
    "} # 创建字典data\n",
    "df = pd.DataFrame(data) # 将字典data转换为DataFrame对象df\n",
    "df # 查看DataFrame对象df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.to_csv('./exercise/chap01/exercise1_1.csv', index=False, encoding='GBK') # 将DataFrame对象df保存为csv文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>收入户等级</th>\n",
       "      <th>2016年</th>\n",
       "      <th>2017年</th>\n",
       "      <th>2018年</th>\n",
       "      <th>2019年</th>\n",
       "      <th>2020年</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>低收入户</td>\n",
       "      <td>3750</td>\n",
       "      <td>4647</td>\n",
       "      <td>6545</td>\n",
       "      <td>8004</td>\n",
       "      <td>10422</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>中等偏下户</td>\n",
       "      <td>7338</td>\n",
       "      <td>9330</td>\n",
       "      <td>12674</td>\n",
       "      <td>17024</td>\n",
       "      <td>21636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>中等收入户</td>\n",
       "      <td>10508</td>\n",
       "      <td>13506</td>\n",
       "      <td>18277</td>\n",
       "      <td>24832</td>\n",
       "      <td>31685</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>中等偏上户</td>\n",
       "      <td>14823</td>\n",
       "      <td>19404</td>\n",
       "      <td>26044</td>\n",
       "      <td>35576</td>\n",
       "      <td>45639</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>高收入户</td>\n",
       "      <td>28225</td>\n",
       "      <td>36957</td>\n",
       "      <td>49175</td>\n",
       "      <td>67132</td>\n",
       "      <td>85541</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   收入户等级  2016年  2017年  2018年  2019年  2020年\n",
       "0   低收入户   3750   4647   6545   8004  10422\n",
       "1  中等偏下户   7338   9330  12674  17024  21636\n",
       "2  中等收入户  10508  13506  18277  24832  31685\n",
       "3  中等偏上户  14823  19404  26044  35576  45639\n",
       "4   高收入户  28225  36957  49175  67132  85541"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取已保存的csv文件\n",
    "df_read = pd.read_csv('./exercise/chap01/exercise1_1.csv', encoding='GBK') # 读取csv文件\n",
    "df_read # 查看DataFrame对象df_read"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Class</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3rd</td>\n",
       "      <td>Male</td>\n",
       "      <td>Child</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3rd</td>\n",
       "      <td>Male</td>\n",
       "      <td>Child</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3rd</td>\n",
       "      <td>Male</td>\n",
       "      <td>Child</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3rd</td>\n",
       "      <td>Male</td>\n",
       "      <td>Child</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3rd</td>\n",
       "      <td>Male</td>\n",
       "      <td>Child</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Class   Sex    Age Survived\n",
       "0   3rd  Male  Child       No\n",
       "1   3rd  Male  Child       No\n",
       "2   3rd  Male  Child       No\n",
       "3   3rd  Male  Child       No\n",
       "4   3rd  Male  Child       No"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('./exercise/chap01/exercise1_2.csv', encoding='GBK') # 读取csv文件\n",
    "df.head() # 查看DataFrame对象df的前5行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>Survived</th>\n",
       "      <th>No</th>\n",
       "      <th>Yes</th>\n",
       "      <th>合计</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Female</th>\n",
       "      <td>126</td>\n",
       "      <td>344</td>\n",
       "      <td>470</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Male</th>\n",
       "      <td>1364</td>\n",
       "      <td>367</td>\n",
       "      <td>1731</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>合计</th>\n",
       "      <td>1490</td>\n",
       "      <td>711</td>\n",
       "      <td>2201</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Survived    No  Yes    合计\n",
       "Sex                      \n",
       "Female     126  344   470\n",
       "Male      1364  367  1731\n",
       "合计        1490  711  2201"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成sex和survived两个变量的二维列联表，并为列联表添加上边际和。\n",
    "tab = pd.crosstab(df['Sex'], df['Survived'], margins=True, margins_name='合计') # 生成列联表\n",
    "tab # 查看列联表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Adult</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Child</th>\n",
       "      <th>合计</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>No</th>\n",
       "      <th>Yes</th>\n",
       "      <th>No</th>\n",
       "      <th>Yes</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Class</th>\n",
       "      <th>Sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">1st</th>\n",
       "      <th>Female</th>\n",
       "      <td>4.0</td>\n",
       "      <td>140.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Male</th>\n",
       "      <td>118.0</td>\n",
       "      <td>57.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5.0</td>\n",
       "      <td>180</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">2nd</th>\n",
       "      <th>Female</th>\n",
       "      <td>13.0</td>\n",
       "      <td>80.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13.0</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Male</th>\n",
       "      <td>154.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11.0</td>\n",
       "      <td>179</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">3rd</th>\n",
       "      <th>Female</th>\n",
       "      <td>89.0</td>\n",
       "      <td>76.0</td>\n",
       "      <td>17.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>196</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Male</th>\n",
       "      <td>387.0</td>\n",
       "      <td>75.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>510</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">Crew</th>\n",
       "      <th>Female</th>\n",
       "      <td>3.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Male</th>\n",
       "      <td>670.0</td>\n",
       "      <td>192.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>862</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>合计</th>\n",
       "      <th></th>\n",
       "      <td>1438.0</td>\n",
       "      <td>654.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>57.0</td>\n",
       "      <td>2201</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Age            Adult        Child          合计\n",
       "Survived          No    Yes    No   Yes      \n",
       "Class Sex                                    \n",
       "1st   Female     4.0  140.0   NaN   1.0   145\n",
       "      Male     118.0   57.0   NaN   5.0   180\n",
       "2nd   Female    13.0   80.0   NaN  13.0   106\n",
       "      Male     154.0   14.0   NaN  11.0   179\n",
       "3rd   Female    89.0   76.0  17.0  14.0   196\n",
       "      Male     387.0   75.0  35.0  13.0   510\n",
       "Crew  Female     3.0   20.0   NaN   NaN    23\n",
       "      Male     670.0  192.0   NaN   NaN   862\n",
       "合计            1438.0  654.0  52.0  57.0  2201"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成class、sex、age和survived4个变量的多维列联表。\n",
    "tab = pd.pivot_table(\n",
    "    df,  index=['Class', 'Sex'], columns=['Age', 'Survived'],\n",
    "    margins=True, margins_name='合计', aggfunc=len\n",
    ")\n",
    "tab"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[150, 160)      0\n",
       "[160, 170)      1\n",
       "[170, 180)     27\n",
       "[180, 190)    150\n",
       "[190, 200)    335\n",
       "[200, 210)    327\n",
       "[210, 220)    130\n",
       "[220, 230)     25\n",
       "[230, 240)      5\n",
       "[240, 250)      0\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 从均值为200，标准差为10的正态总体中产生1000个随机数，并将这1000个随机数据分成组距为10的组，生成频数分布表。\n",
    "np.random.seed(100) # 设置随机数种子\n",
    "x = np.random.normal(loc=200, scale=10, size=1000) # 生成1000个均值为200，标准差为10的正态分布的随机数\n",
    "f = pd.cut(x, bins=range(150, 260, 10), right=False) # 将x分成组距为10的组\n",
    "tab = f.value_counts() # 查看频数表\n",
    "tab # 查看频数表"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.10"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
